根据 2D numpy 数组过滤 3D numpy 数组

yus*_*suf 5 python arrays 3d numpy

我有一个形状为 (3024, 4032) 的二维 numpy 数组。

我有一个形状为 (3024, 4032, 3) 的 3D numpy 数组。

二维 numpy 数组用 0 和 1 填充。

3D numpy 数组填充了 0 到 255 之间的值。

通过查看 2D 数组值,我想更改 3D 数组中的值。如果 2D 数组中的值为 0,我会将 3D 数组中的所有 3 个像素值沿最后一个轴更改为 0。如果二维数组中的值为 1,我不会更改它。

我已经检查过这个问题,如何用另一个数组的值过滤一个 numpy 数组,但它适用于 2 个具有相同维度的数组。就我而言,尺寸是不同的。

如何在两个数组中应用过滤,在两个维度上具有相同的大小,但在最后一个维度上没有大小?

Pau*_*zer 7

好的,我会回答这个问题以强调一个关于“缺失”维度的特殊性。让我们假设a.shape==(5,4,3)b.shape==(5,4)

索引,现有的尺寸是对齐这就是为什么@ Divakar的解决方案a[b == 0] = 0作品。

广播,现有尺寸正确对齐这就是为什么@侵略者Zim的a*b不起作用。您需要做的是a*b[..., None]在右侧插入一个可广播维度