使用多个未知数条件的numpy返回指数
考虑两个数组(X和Y),X是一个二维数据数组(灰度图像),Y是一个条件数组,其中数组X需要根据以下条件进行过滤:使用多个未知数条件的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 = 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 exIfY
不是太大isin
实际上使用了一个重复的
,OP的泛化。看看它的代码。谢谢amzon ex
np.isin(X, Y)