使用函数操作ndarray维度并向其添加新数据

时间:2018-02-23 16:46:19

标签: function numpy multidimensional-array

我用它来控制分形绘图程序的色阶。我想知道是否有办法消除r,g,b变量并将结果插入到img ndarray中?我已经摆弄了添加np.expand_dims的新维度,但形状变成(5,5,1)而不是(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)

1 个答案:

答案 0 :(得分:0)

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

加入r,g,b数组后的新数组是(3,5,5)。

第一个rollaxis将其更改为(5,5,3)数组。

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

会做同样的事情。

第二个rollaxis交换前两个维度,实际上是转置原始图像。 (实际上两个rollaxis都可以替换为img.transpose()

即使您使用expand_dims,您仍然会创建一个新数组(尽管它与原始数据共享数据缓冲区)。但是(5,5,1)仍然没有空间来存储3个颜色值。原件有25个值,新图像有75个。你必须以某种方式制作一个新的数组。

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

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

所有3个维度的不同尺寸可以更容易地看到形状的变化。