在numpy中找到两个数组中元素对的位置

sha*_*ane 3 python arrays numpy

我有两个numpy数组xy

假设x = [0, 1, 1, 1, 3, 4, 5, 5, 5]y = [0, 2, 3, 4, 2, 1, 3, 4, 5]

两个数组的长度是相同的,我正在寻找的坐标对肯定存在于数组中.

如何(a, b)在这些数组中找到索引,其中a是元素,x并且b是其中的对应元素y.例如,的指数(1, 4)将是3:在索引中的元素3xy14分别.

ray*_*ica 7

如果你想要一个纯粹的解决方案,你可以numpy.where结合使用:numpy.logical_andnumpy

In [16]: import numpy as np

In [17]: x = np.array([0, 1, 1, 1, 3, 4, 5, 5, 5])

In [18]: y = np.array([0, 2, 3, 4, 2, 1, 3, 4, 5])

In [19]: np.where(np.logical_and(x == 1, y == 4))[0]
Out[19]: array([3], dtype=int64)
Run Code Online (Sandbox Code Playgroud)

numpy.logical_and允许您以元素方式执行两个numpy数组之间的逻辑AND操作.我们在这里做的是确定哪些位置包含x值为1且y在相同的相应位置中值为4.那些满足这个要求的地方True. numpy.where确定满足此条件的阵列中的位置. numpy.where实际上返回条件True分别作为两个元素的元组的行和列位置,但由于我们只考虑一个维度,因此只有第一个元组有效,这就是我们立即索引元组的第一个元素的原因.

输出是numpy条件有效的位置数组.您甚至可以进一步强制输出为索引列表以使事情更整洁和/或是否需要(感谢@EddoHintoso):

In [20]: list(np.where(np.logical_and(x == 1, y == 4))[0])
Out[20]: [3]
Run Code Online (Sandbox Code Playgroud)