Python 在多维numpy数组中查找多个查询的索引

Python 在多维numpy数组中查找多个查询的索引,python,arrays,numpy,multidimensional-array,Python,Arrays,Numpy,Multidimensional Array,我正在寻找一种在多维数组中查找查询数组索引的方法。例如: arr = np.array([[17, 5, 19, 9], [18, 13, 3, 7], [ 8, 1, 4, 2], [ 8, 9, 7, 19], [ 6, 11, 8, 5], [11, 16, 13, 18], [ 0, 1, 2, 9], [ 1, 7, 4, 6]]) 我可以找到一个查询的索引: np.where(arr==1) # (arra

我正在寻找一种在多维数组中查找查询数组索引的方法。例如:

arr = np.array([[17,  5, 19,  9],
   [18, 13,  3,  7],
   [ 8,  1,  4,  2],
   [ 8,  9,  7, 19],
   [ 6, 11,  8,  5],
   [11, 16, 13, 18],
   [ 0,  1,  2,  9],
   [ 1,  7,  4,  6]])
我可以找到一个查询的索引:

np.where(arr==1)
# (array([2, 6, 7]), array([1, 1, 0]))
是否有任何numpy解决方案可以对多个值执行此操作,以替换以下
for
循环

for q in queries:
    np.where(arr==q)

如果数组和查询都是一维的,我可以使用
searchsorted
as,但它不适用于多维数组。

通过压缩
where
函数的结果,然后使用
*
解引用操作符,可以获得每个匹配值的索引

arr = np.array([[17,  5, 19,  9],
                [18, 13,  3,  7],
                [ 8,  1,  4,  2],  # (2, 1)
                [ 8,  9,  7, 19],
                [ 6, 11,  8,  5],
                [11, 16, 13, 18],
                [ 0,  1,  2,  9],  # (6, 1)
                [ 1,  7,  4,  6]])  # (7, 0)

>>> zip(*np.where(arr == 1))
[(2, 1), (6, 1), (7, 0)]
我不确定您的预期输出是什么,但您可以使用字典理解来显示给定数字集的索引位置,例如:

>>> {n: zip(*np.where(arr == n)) for n in range(5)}
{0: [(6, 0)],
 1: [(2, 1), (6, 1), (7, 0)],
 2: [(2, 3), (6, 2)],
 3: [(1, 2)],
 4: [(2, 2), (7, 2)]}
IIUC你可以试试这个:

In[19]:np.where((arr==4)|(arr==5))
Out[19]: (array([0, 2, 4, 7], dtype=int64), array([1, 2, 3, 2], dtype=int64))

谢谢,但我想得到
np.where(arr==q)
q
的不同值!您想为
q
的每个值或
q
的所有值建立索引吗?>>ix=np.in1d(arr.ravel(),[1,8,18])。重塑(arr.shape).>>found=np.array(列表(zip(np.where(ix)))。。。列表是python 3中需要的。