通过功能来操纵ndarray维度并向其添加新数据



我正在使用它来控制分形绘图程序上的颜色比例。我想知道是否有一种方法可以消除R,G,B变量并将结果插入IMG NDARRAY中?我摆弄了使用np.expand_dims添加一个新的维度,但是形状变成(5,5,1(,而不是(5,5,3(,如我所需的(5,5,3(。重塑这似乎是一场噩梦。

import numpy as np
#img is an array of values to be converted into RGB from another process
img = np.arange(25)
img = np.reshape(img,(5,5))
#simplified example of original process
r = img*2
g = img*3
b = img*4
#creating new array to accomidate the higher dimension
img = np.array([r,g,b], dtype = np.uint8)
#no longer needed
del r,g,b
#rolling axis for PIL Image.fromarray compatibily
img = np.rollaxis(img,0,3)
img = np.rollaxis(img,0,2)
print(img)

img以(5,5(数组开始。这是25个像素中的每个值一个值。

加入r,g,b阵列后的新数组为(3,5,5(。

第一个滚动变化为(5,5,3(阵列。

np.stack([r,g,b], axis=2)

会做同样的事情。

第二个胶卷交换前两个维度,实际上是转移原始图像。(实际上,两个rollaxis可以用一个img.transpose()替换。

即使使用expand_dims,您仍然会制作一个新数组(尽管它确实与原始数量共享数据库(。但是(5,5,1(仍然没有空间存储3个颜色值。原始值有25个值,新图像具有75。您必须以一种或另一种方式制作一个新数组。

要更好地了解rollaxis部分,我建议使用像

这样的数组玩
arr = np.arange(24).reshape(3,2,4)

在所有三个维度中的不同尺寸都使您更容易看到形状的变化。

最新更新