Создайте 3d-массив в numpy из существующего 2d-массива - PullRequest
11 голосов
/ 13 ноября 2009

Во время подготовки данных для расчета NumPy. Мне интересно, как построить:

myarray.shape => (2,18,18)

от:

d1.shape => (18,18)
d2.shape => (18,18)

Я пытаюсь использовать команду NumPy:

hstack([[d1],[d2]])

но выглядит не работает!

Ответы [ 3 ]

26 голосов
/ 13 ноября 2009

Мне кажется, просто делать 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)
8 голосов
/ 13 ноября 2009

hstack и vstack не меняют количество измерений массивов: они просто помещают их «рядом». Таким образом, объединение 2-мерных массивов создает новый 2-мерный массив (а не 3D!).

Вы можете сделать то, что предложил Даниил (напрямую используйте 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 голосов
/ 16 апреля 2019
arr3=np.dstack([arr1, arr2])

arr1, arr2 - двумерный массив shape (256,256), arr3: shape(256,256,2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...