我想使用维度>= 3中的布尔逻辑替换numpy数组中的值。我可以找到的所有示例都是针对1d或2d数组的,因此您可以说A[A>.5] = 1之类的内容。我了解。我想做这样的事情:

A[B==0,2 > 128] = 0。基本上,我有一个2D地图(B),其尺寸与A中的前两个相同。因此,每个地方B == 0和第三个通道(如图像中的RGB B)都大于128,我想将第三个通道设置为零,而保留其他两个通道。

我可以在一个循环中执行此操作,也可以在数组循环中执行一个for值,但是我希望有人可以告诉我是否可以以与A[A>.5] = 1类似的方式进行操作。

我已经尝试过A[B==0,2 > 128] = 0,但是得到了IndexError: in the future, 0-d boolean arrays will be interpreted as a valid boolean index,我真的想不出任何其他方式来编写它。

我忘记提及的一件事-目前我可以执行A[B==0,2] = 0。我只是在尝试如何适应额外的条件。

谢谢!

最佳答案

A[(B == 0)*(A[..., 2] > 128), 2] = 0


说明:


B == 0A[..., 2] > 128是相同的尺寸,其中[..., 2]指定在所有尺寸的所有轴上进行切片,直到最后一个尺寸为止,在最后一个尺寸中,仅切割由2索引的轴。在不满足您的要求的任何条件下,两者的乘积为False
2是最后一个维度上A的第三个轴。

10-07 19:03
查看更多