我有三个同样尺寸的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)])
答案 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数组。