python - 如何将 2d 数组添加(不附加)到 3d 数组的每个 2d 数组?
问题描述
我想矢量化将 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
为结果数据类型,然后在扩展为3D
with后广播/重复np.newaxis/None
-
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]