Определите двумерный массив и список:
In [73]: arr = np.arange(12).reshape(4,3)
In [74]: arr
Out[74]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
In [75]: alist = [10,11,12,13]
Обратите внимание на их формы:
In [76]: arr.shape
Out[76]: (4, 3)
In [77]: np.array(alist).shape
Out[77]: (4,)
Чтобы присоединиться alist
к arr
, оно должно иметь одинаковое количестворазмеры и такое же количество «строк».Мы можем сделать это, добавив измерение с None
идиомой:
In [78]: np.array(alist)[:,None].shape
Out[78]: (4, 1)
Теперь мы можем объединить по 2-й оси:
In [79]: np.concatenate((arr, np.array(alist)[:,None]),axis=1)
Out[79]:
array([[ 0, 1, 2, 10],
[ 3, 4, 5, 11],
[ 6, 7, 8, 12],
[ 9, 10, 11, 13]])
column_stack
делает то же самое,заботясь о том, чтобы каждый вход был как минимум 2d (я бы посоветовал прочитать его код.) В долгосрочной перспективе вы должны быть достаточно знакомы с размерами и формами, чтобы сделать это с простым concatenate
.
In [81]: np.column_stack((arr, alist))
Out[81]:
array([[ 0, 1, 2, 10],
[ 3, 4, 5, 11],
[ 6, 7, 8, 12],
[ 9, 10, 11, 13]])
np.c_
также делает это - но обратите внимание на использование [] вместо ().Это умное использование индексной нотации, удобное, но потенциально запутанное.
np.c_[arr, alist]
np.r_['-1,2,0', arr, alist] # for more clever obscurity