使用多个未知数条件的numpy返回指数

使用多个未知数条件的numpy返回指数,numpy,Numpy,考虑两个数组(X和Y),X是一个二维数据数组(灰度图像),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和Y),X是一个二维数据数组(灰度图像),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.arg函数中使用多个条件也是可以实现的,但是,条件的数量(数组Y的长度)以前是未知的


谢谢

关键是准备好正确的面具。为此,请使用:


您将得到一个与
X
具有相同形状的布尔掩码。现在,您可以使用适当的方法获取索引。

关键是准备正确的掩码。为此,请使用:


您将得到一个与
X
具有相同形状的布尔掩码。现在,您可以使用适当的方法获取索引。

argwhere
只执行
np.transpose(np.where(cond))
。也就是说,它将
np.where/nonzero
生成的数组元组转换为2d数组。元组形式可以直接用作索引(对于像
X
这样的数组)。
argwhere
版本必须按行迭代,或将列用作索引数组(复制
非零索引)。
argwhere
只执行
np.transpose(np.where(cond))
。也就是说,它将
np.where/nonzero
生成的数组元组转换为2d数组。元组形式可以直接用作索引(对于像
X
这样的数组)。
argwhere
版本必须按行迭代,或使用列作为索引数组(复制
非零索引)。如果
Y
不是太大
isin
实际上使用重复的
,OP的泛化。看看它的代码。谢谢amzon exIf
Y
不是太大
isin
实际上使用了一个重复的
,OP的泛化。看看它的代码。谢谢amzon ex
np.isin(X, Y)