Объединить несколько 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-массивами.

Другие вопросы по тегам