Объединить несколько NumPy ndarrays как список
У меня есть три одинаковых размерных массива.
Я хотел бы хранить данные из всех трех в массиве одинакового размера и размера. Для этого я хотел бы хранить три байта информации на элемент в массиве. Я предполагаю, что это будет список.
например
>>>red = np.array([[150,25],[37,214]])
>>>green = np.array([[190,27],[123,231]])
>>>blue = np.array([[10,112],[123,119]])
вставить волшебство комбинации, чтобы сделать объединенный массив под названием RGB
>>>RGB
array([(150,190,10),(25,27,112)],[(37,123,123),(214,231,119)])
1 ответ
Для начала, каждый 2x2. Объединены в список с array
та же конструкция, что и при изготовлении red
, производит 3x2x2.
In [344]: red = np.array([[150,25],[37,214]])
In [345]: green = np.array([[190,27],[123,231]])
In [346]: blue = np.array([[10,112],[123,119]])
In [347]: np.array([red,green,blue])
Out[347]:
array([[[150, 25],
[ 37, 214]],
[[190, 27],
[123, 231]],
[[ 10, 112],
[123, 119]]])
In [348]: _.shape
Out[348]: (3, 2, 2)
Это не тот порядок, который вы хотите, но мы можем легко изменить форму и, если необходимо, перенести.
Цель, с добавленным набором []
In [350]: np.array([[(150,190,10),(25,27,112)],[(37,123,123),(214,231,119)]])
Out[350]:
array([[[150, 190, 10],
[ 25, 27, 112]],
[[ 37, 123, 123],
[214, 231, 119]]])
In [351]: _.shape
Out[351]: (2, 2, 3)
так что попробуйте переместить 3
сформировать до конца transpose
:
In [352]: np.array([red,green,blue]).transpose(1,2,0)
Out[352]:
array([[[150, 190, 10],
[ 25, 27, 112]],
[[ 37, 123, 123],
[214, 231, 119]]])
===========================
Я должен был предложить stack
, Это обновленная версия concatenate
это позволяет нам объединять массивы в разных новых измерениях. С axis=0
ведет себя как np.array
, Но присоединиться к последнему, чтобы поставить rgb
Размер последнего использования:
In [467]: np.stack((red,green,blue),axis=-1)
Out[467]:
array([[[150, 190, 10],
[ 25, 27, 112]],
[[ 37, 123, 123],
[214, 231, 119]]])
In [468]: _.shape
Out[468]: (2, 2, 3)
Обратите внимание, что это выражение не предполагает ничего о форме red
и т. д., за исключением того, что они равны. Так что он будет работать и с 3D-массивами.