Python:查找索引
如果我有a和b:Python:查找索引,python,arrays,numpy,find,vectorization,Python,Arrays,Numpy,Find,Vectorization,如果我有a和b: a=[[1,2,3], [4,5,6], [7,8,9]] b=8.1 我想找到a中b值的索引,我可以: nonzero(abs(a-b)<0.5) 我想得到(2,1),(0,2),(2,2) 一般来说,我希望a中的每一个b值只有一个匹配项。我可以避免for循环吗?使用列表理解: [nonzero(abs(x-a)<0.5) for x in b] [非零(abs(x-a)矢量化进近- 在b上使用列表理解。如果b是2d数组怎么办?然后使用嵌套列表
a=[[1,2,3],
[4,5,6],
[7,8,9]]
b=8.1
我想找到a中b值的索引,我可以:
nonzero(abs(a-b)<0.5)
我想得到(2,1),(0,2),(2,2)
一般来说,我希望a中的每一个b值只有一个匹配项。我可以避免for循环吗?使用列表理解:
[nonzero(abs(x-a)<0.5) for x in b]
[非零(abs(x-a)矢量化进近-
在b
上使用列表理解。如果b是2d数组怎么办?然后使用嵌套列表理解。输出数组的第一个条目不应该是[2,1]
而不是[0,2]
?有没有办法防止它重新排序数组?我需要:数组([[2,1],[0,2],[2,2]]))
@AB请查看编辑。假设顺序很重要,请进行相应编辑。
[nonzero(abs(x-a)<0.5) for x in b]
np.argwhere((np.abs(a - b[:,None,None])<0.5))[:,1:]
In [71]: a
Out[71]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [72]: b
Out[72]: array([ 8.1, 3.1, 9.1, 0.7])
In [73]: np.argwhere((np.abs(a - b[:,None,None])<0.5))[:,1:]
Out[73]:
array([[2, 1],
[0, 2],
[2, 2],
[0, 0]])