我有一个形状(10, 3)2D数组和一个表示为形状(480, 640, 3)3D数组的图像.我想对2D数组中的每个像素和每个元素进行差值运算,以得到形状(10, 480, 640, 3)的最终结果. 目前,我的代码如下所示:

arr_2d = np.random.rand(10, 3)
arr_3d = np.random.rand(480, 640, 3)
res = np.ones_like(arr_3d)
res = np.tile(res, (10, 1, 1, 1))

for i in range(10):
    res[i] = arr_3d - arr_2d[i]

我的问题是,是否有一种方法可以在不使用for循环的情况下做到这一点,只使用NumPy操作.

推荐答案

您可以try 使用np.array进行广播,如下所示

arr_2d = arr_2d.reshape(-1,1,1,3)
arr_3d = arr_3d.reshape((-1,*arr_3d.shape))
res = arr_3d - arr_2d

这应该会产生与原始代码相同的结果

Python相关问答推荐

如何避免Chained when/then分配中的Mypy不兼容类型警告?

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

在Wayland上使用setCellWidget时,try 编辑QTable Widget中的单元格时,PyQt 6崩溃

Python键入协议默认值

如果值发生变化,则列上的极性累积和

如何在Polars中从列表中的所有 struct 中 Select 字段?

python中字符串的条件替换

多处理队列在与Forking http.server一起使用时随机跳过项目

使用Python从URL下载Excel文件

在matplotlib中删除子图之间的间隙_mosaic

如何在PySide/Qt QColumbnView中删除列

AES—256—CBC加密在Python和PHP中返回不同的结果,HELPPP

matplotlib + python foor loop

未调用自定义JSON编码器

numpy.unique如何消除重复列?

Flask Jinja2如果语句总是计算为false&

从源代码显示不同的输出(机器学习)(Python)

为什么t sns.barplot图例不显示所有值?'

用0填充没有覆盖范围的垃圾箱

如何通过特定导入在类中执行Python代码