考虑两个数组(X和Y(,X是2D数据数组(灰度图像(,Y是条件数组,其中数组X需要基于以下条件进行过滤:
X = np.array([[0,0,0,0,4], [0,1,1,2,3], [1,1,2,2,0], [0,0,2,2,3], [0,0,0,0,0]])
Y = np.array([1,2,3])
X:
[[0 0 0 0 4]
[0 1 1 2 3]
[1 1 2 2 0]
[0 0 2 2 3]
[0 0 0 0 0]]
Y:
[1 2 3]
我需要根据数组Y中的值来选择数组X的元素/索引,这样:
Z = np.argwhere((X == Y[0]) | (X == Y[1]) | (X == Y[2]))
Z:
[[1 1]
[1 2]
[1 3]
[1 4]
[2 0]
[2 1]
[2 2]
[2 3]
[3 2]
[3 3]
[3 4]]
这可以通过在数组Y的项上使用循环来完成,是否有numpy函数可以实现这一点?
在np.argwhere
函数中使用多个条件也可以实现,但是,条件的数量(数组Y的长度(以前是未知的。
感谢
关键是准备正确的掩码。为此,请使用numpy.isin
:
np.isin(X, Y)
结果,您将得到一个与X
形状相同的布尔掩码。现在,您可以使用适当的方法获取索引。