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