将多个numpy ndarrays组合为列表

时间:2016-11-18 03:40:25

标签: arrays numpy combinations

我有三个同样尺寸的numpy数组。

我想将所有三个数据存储在相同尺寸和大小的数组中。 为此,我想在数组中为每个项目存储三个字节的信息。我认为这将是一个列表。

e.g。

>>>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 个答案:

答案 0 :(得分: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数组。