2015-03-16 3 views
2

Это, кажется, тривиальный вопрос, но я не нашел ответ, который я ищу. У меня есть 2D массив сказать:Как вставить столбец в многомерный массив?

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

И еще один столбец

b = np.array([9,11]) 
bt = np.reshape(b, (2,1)) 

Я хотел бы добавить/добавить в bt столбец на нулевом столбце массива a. Я попытался с помощью numpy.insert:

tt = np.insert(a,0,bt,axis=1) 

Но результат:

array([[ 9, 11, 1, 3, 5], 
     [ 9, 11, 2, 4, 6]]) 

Что я хочу:

array([[ 9, 1, 3, 5], 
     [ 11, 2, 4, 6]]) 

Что я делаю неправильно?

ответ

2

Вы можете использовать numpy.column_stack, чтобы сделать это:

a = np.array([[1,3,5],[2,4,6]]) 
b = np.array([9,11]) 
np.column_stack((b, a)) 

array([[ 9, 1, 3, 5], 
     [11, 2, 4, 6]]) 
2

Вы можете либо непосредственно использовать b:

tt = np.insert(a, 0, b, axis=1) 
print tt 

[[ 9 1 3 5] 
[11 2 4 6]] 

Или, если вы начинаете с чем-то в форме, как bt, транспонировать:

tt = np.insert(a, 0, bt.T, axis=1) 
print tt 

[[ 9 1 3 5] 
[11 2 4 6]] 
0

В качестве альтернативы наряду с np.hstack Вы можете играть в indexing:

>>> c=np.zeros((a.shape[0],a.shape[1]+1)) 
>>> c[::,0]=b 
>>> c[::,1:]=a 
>>> c 
array([[ 9., 1., 3., 5.], 
     [ 11., 2., 4., 6.]]) 
+0

Это интересное решение. Но я не полностью следую. Что такое: >>> c [::, 0] = b >>> c [::, 1:] = a – icypy

+0

@Arcticpython назначение столбца! 'c [::, 0] = b' присваивает' b' в первом столбце 'c' и' c [::, 1:] = a' присваивает 'a' во втором столбце c конец – Kasramvd

Смежные вопросы