Заполнить предопределенный массив numpy массивами в виде столбцов

Что-то я не могу понять, прочитав документацию Python и stackoverflow. Наверное я не в том направлении думаю..

Допустим, у меня есть предопределенный массив 2D Numpy следующим образом:

a = np.zeros(shape=(3,2)) 
print a
array([[ 0.,  0.],
       [ 0.,  0.],
       [ 0.,  0.]])

Теперь я хотел бы заполнить каждый столбец этого 2D-массива массивом 1D-данных (один за другим), как в:

b = np.array([1,2,3])

# Some code, that I just can't figure out. I've studied insert, column_stack, 
# h_stack, append. Nothing seems to do what I need

print a
array([[ 1.,  0.],
       [ 2.,  0.],
       [ 3.,  0.]])

c = np.array([4,5,6])

# Some code, that I just can't figure out. I've studied insert, column_stack, 
# h_stack, append. Nothing seems to do what I need

print a
array([[ 1.,  4.],
       [ 2.,  5.],
       [ 3.,  6.]])

Мы ценим любые предложения!


person Mattijn    schedule 06.06.2013    source источник


Ответы (1)


Вы можете назначить столбцам с нарезкой:

>>> a[:,0] = b
>>> a
array([[ 1.,  0.],
       [ 2.,  0.],
       [ 3.,  0.]])

Чтобы назначить их все сразу, а не по одному, используйте np.column_stack:

>>> np.column_stack((b, c))
array([[1, 4],
       [2, 5],
       [3, 6]])

Если вам нужно вернуть его в тот же массив, а не просто иметь то же имя, вы можете назначить его срезу, содержащему всю матрицу (как это обычно бывает со списками):

>>> a[:] = np.column_stack((b, c))
>>> a
array([[ 1.,  4.],
       [ 2.,  5.],
       [ 3.,  6.]])
person lvc    schedule 06.06.2013
comment
Действительно полезный ответ. Спасибо - person Mattijn; 06.06.2013