【问题标题】:Convert the results of np.argsort() to tuple将 np.argsort() 的结果转换为元组
【发布时间】:2019-03-05 09:45:59
【问题描述】:

我有一个 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个最小的数

【问题讨论】:

  • 您可能想先展平阵列。以下内容可能对您有所帮助:min_element = A.ravel()[np.argsort(A.ravel())][0]max_element = A.ravel()[np.argsort(A.ravel())][-1]
  • 不,我想将 A 保留为 2d

标签: python-3.x numpy


【解决方案1】:
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

我们可以通过以下方式获得二维索引:

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

【讨论】:

    猜你喜欢
    • 2013-04-24
    • 2015-01-07
    • 1970-01-01
    • 2011-08-09
    • 2018-06-26
    • 2015-09-14
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多