我有一个充满浮点数的10x10数组,想获取索引,该索引将对该数组进行排序并将其放入一个数组或元组列表中。对于一个较小的示例,我有:
A = [[0,1,2],[4,9,3],[5,8,7]]
(不是10x10,但这只是示例)
然后我要创建:
ind = [(0,0),(0,1),(0,2),(1,2),(1,0),(2,0),(2,2),(2,1),(1,1)]
现在我尝试了
ind = np.argsort(A,axis=0)
类似于
ind = [0 1 2 12 10 20 22 21 11]
最终目标是能够做到
A[ind[i]]
并获得第i个最小数字
答案 0 :(得分:2)
In [55]: A = np.array([[0,1,2],[4,9,3],[5,8,7]])
argsort
和轴None
对整个东西进行排序:
In [56]: idx=np.argsort(A,None)
In [57]: idx
Out[57]: array([0, 1, 2, 5, 3, 6, 8, 7, 4])
有些索引为A的平整或斜切形式
In [58]: A.flat[idx]
Out[58]: array([0, 1, 2, 3, 4, 5, 7, 8, 9])
第三小:
In [59]: A.flat[idx[2]]
Out[59]: 2
我们可以使用以下方法获得2d索引:
In [60]: np.unravel_index(idx,A.shape)
Out[60]: (array([0, 0, 0, 1, 1, 2, 2, 2, 1]), array([0, 1, 2, 2, 0, 0, 2, 1, 1]))
我相信这些值与您所需的索引集匹配-但是我必须将它们转换为元组才能进行索引:
In [61]: np.transpose(np.unravel_index(idx,A.shape))
Out[61]:
array([[0, 0],
[0, 1],
[0, 2],
[1, 2],
[1, 0],
[2, 0],
[2, 2],
[2, 1],
[1, 1]])
In [63]: A[tuple(_61[2])]
Out[63]: 2