Как добавить элементы в массив numpy

Мне нужно выполнить следующую задачу:

от

a = array([[1,3,4],[1,2,3]...[1,2,1]])

(добавьте один элемент в каждую строку):

a = array([[1,3,4,x],[1,2,3,x]...[1,2,1,x]])

Я пробовал делать такие вещи, как [n] = array ([1,3,4, x])

но numpy жаловался на несоответствие формы. Я попытался выполнить итерацию через a и добавить элемент x к каждому элементу, но изменения не отражаются.

Любые идеи о том, как я могу это сделать?

Ответ 1

Добавление данных в существующий массив - это естественная вещь, которую нужно делать для тех, у кого есть опыт работы с python. Однако, если вы регулярно добавляете большие массивы, вы быстро обнаружите, что NumPy не просто и не делает это так, как это делает python list. Вы обнаружите, что каждое действие "добавить" требует перераспределения памяти массива и кратковременного дублирования требований к памяти. Таким образом, более общее решение проблемы состоит в том, чтобы попытаться распределить массивы так же, как конечный результат вашего алгоритма. Затем выполните все операции над подмножествами (фрагменты) этого массива. Идеальное создание и уничтожение массивов.

Тем не менее, это часто неизбежно, и функции, которые это делают:

для двухмерных массивов:

для трехмерных массивов (выше плюс):

для N-D массивов:

Ответ 2

import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
b = np.array([10,20,30])
c = np.hstack((a, np.atleast_2d(b).T))

возвращает c:

array([[ 1,  3,  4, 10],
       [ 1,  2,  3, 20],
       [ 1,  2,  1, 30]])

Ответ 3

Один из способов сделать это (возможно, не самый лучший) - создать еще один массив с новыми элементами и сделать column_stack. то есть.

>>>a = array([[1,3,4],[1,2,3]...[1,2,1]])
[[1 3 4]
 [1 2 3]
 [1 2 1]]

>>>b = array([1,2,3])
>>>column_stack((a,b))
array([[1, 3, 4, 1],
       [1, 2, 3, 2],
       [1, 2, 1, 3]])

Ответ 4

Добавление одного скаляра может быть сделано немного проще, как уже показано (а также без преобразования в float), путем расширения скаляра до типа списка python:

import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
x = 10

b = np.hstack ((a, [[x]] * len (a) ))

возвращает b как:

array([[ 1,  3,  4, 10],
       [ 1,  2,  3, 10],
       [ 1,  2,  1, 10]])

Добавление строки может быть выполнено с помощью:

c = np.vstack ((a, [x] * len (a[0]) ))

возвращает c как:

array([[ 1,  3,  4],
       [ 1,  2,  3],
       [ 1,  2,  1],
       [10, 10, 10]])

Ответ 5

Если x - всего лишь одно скалярное значение, вы можете попробовать что-то вроде этого, чтобы обеспечить правильную форму массива, который добавляется/конкатенируется в самый правый столбец a:

import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
x = 10
b = np.hstack((a,x*np.ones((a.shape[0],1))))

возвращает b как:

array([[  1.,   3.,   4.,  10.],
       [  1.,   2.,   3.,  10.],
       [  1.,   2.,   1.,  10.]])

Ответ 6

target = []

for line in a.tolist():
    new_line = line.append(X)
    target.append(new_line)

return array(target)