首页 > 解决方案 > np.where 还检查多维数组中的子元素

问题描述

我有两个具有相同第二维的多维数组。我想确保第一个数组的任何元素(即没有行)也是第二个数组的行。

为此,我正在使用numpy.where,但它的行为也在检查同一位置的子元素。例如考虑以下代码:

x = np.array([[0,1,2,3], [4,0,6,9]])
z= np.array([[0,1,2,3], [5, 11, 6,98]])
for el in x:
    print(np.where(z==el))

它打印:

(array([0, 0, 0, 0]), array([0, 1, 2, 3]))
(array([1]), array([2]))

其中第一个结果是由于第一个数组相等,第二个结果是因为两者都和z[1]作为第三个元素。有没有办法告诉只返回严格相等元素的索引,即在上面的例子中?x[1]6np.where0

标签: pythonarrayspython-3.xnumpy

解决方案


[i for i, e in enumerate(x) if (e == z).all(1).any()]

测试用例:

x = np.array([[0,1,2,3], [4,0,6,9], [4,0,6,19]])
z= np.array([[4,0,6,9], [0,1,2,3]])

[i for i, e in enumerate(x) if (e == z).all(1).any()]

输出:

[0, 1]

推荐阅读