繁体   English   中英

如何向 3d 数组的每个 2d 数组添加(不附加)一个 2d 数组?

[英]How to add (not append) a 2d array to each 2d array of a 3d array?

我想矢量化将 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 行代码向量化为一行

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM