如何将2d数组添加(而不是追加)到3d数组的每个2d数组?

时间:2019-08-10 15:59:00

标签: python numpy

我想对将2d数组添加到3d数组中的每个2d数组的过程进行矢量化处理。

我使用来自matplotlib的图像导入了图像文件

data = image.imread('test.jpg')

然后我尝试将每个RGB数组的平均值添加到与data形状相同的另一个数组中

data2 = np.zeros_like(data)
data3 = np.average(data, axis=2)
for i in range(len(data2[0,0,:])):
    data2[:,:,i] = data3

我只想将上述2行代码矢量化为一行

1 个答案:

答案 0 :(得分:1)

data3转换为结果数据类型,然后在使用np.newaxis/None扩展到3D之后广播/重复-

b = data3.astype(data.dtype)
data2_out = np.broadcast_to(b[...,None], data.shape)

输出仅是b的视图,因此我们在那里获得了内存效率。

如果您需要一个具有自己的存储空间的输出,我们可以使用data2_out.copy()或使用np.repeat强制复制,就像这样-

np.repeat(b[...,None],data.shape[2],axis=2)

如果您已经初始化了输出数组data2并只想分配给它,我们可以通过将data3扩展到3D来实现,这在某些情况下也可能更直观,就像这样-

data2[:] = data3[...,None]