2009-11-13 2 views

ответ

6

hstack и vstack не делать никаких изменений количества размерностей массивов: они просто положить их «бок о бок». Таким образом, объединение двумерных массивов создает новый двумерный массив (а не трехмерный)!

Вы можете сделать то, что предложил Даниил (напрямую использовать numpy.array([d1, d2])).

Вы можете альтернативно преобразовать массивы в 3D массивы перед укладкой их, добавляя новое измерение в каждом массиве:

d3 = numpy.vstack([ d1[newaxis,...], d2[newaxis,...] ]) # shape = (2, 18, 18) 

В самом деле, d1[newaxis,...].shape == (1, 18, 18), и вы можете сложить обе 3D массивы непосредственно и получить новый 3D-массив (d3), который вы хотели.

+0

:) Спасибо EOL, теперь я больше знаю о vstack, hstack – vernomcrp

+1

'np.vstack ([a [np.newaxis, ...], b [np.newaxis, ...]])' работал как шарм ! Благодарю. – thepunitsingh

21

Просто делать d3 = array([d1,d2]), кажется, работает для меня:

>>> from numpy import array 
>>> # ... create d1 and d2 ... 
>>> d1.shape 
(18,18) 
>>> d2.shape 
(18,18) 
>>> d3 = array([d1, d2]) 
>>> d3.shape 
(2, 18, 18) 
+0

oh его работы, спасибо Daniel :) – vernomcrp

+1

У меня есть один вопрос, похожий. Если у меня уже есть d3 с формой (2,18,18), и я хочу добавить еще 2-мерный массив d4 (18x18) в d3, чтобы создать 3-мерный массив (3,18,18). Что мне делать? –

+1

Вы просто 'vstack (d3, d4 [np.newaxis, ...])', как в моем ответе. – EOL

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