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中需要的。