如何获得 numpy 二维数组中列的排名?

How to get the rank of a column in numpy 2d array?

假设我有一个数组:

a = np.array([[1,2,3,4],
              [4,2,5,6],
              [6,5,0,3]])

我想获取每行第 0 列的排名(即 np.array([0, 1, 3])),有什么捷径可以做到这一点吗?

在一维数组中,我可以使用 np.sum(a < a[0]) 来执行此操作,但是二维数组呢?不过好像<不能播。

方法 #1

沿行使用 np.argsort 并查找与第一列相对应的索引 0,从而为我们提供与输入数组形状相同的掩码。最后,获取所需排名输出的掩码中匹配项 (True) 的列索引。因此,实施将是 -

np.where(a.argsort(1)==0)[1]

方法 #2

另一种一次获得所有列排名的方法是对前面的方法稍作修改。实现看起来像这样 -

(a.argsort(1)).argsort(1)

所以,要获得第一列的排名,索引到它的第一列,就像这样 -

(a.argsort(1)).argsort(1)[:,0]

样本运行

In [27]: a
Out[27]: 
array([[1, 2, 3, 4],
       [4, 2, 5, 6],
       [6, 5, 0, 3]])

In [28]: np.where(a.argsort(1)==0)[1]
Out[28]: array([0, 1, 3])

In [29]: (a.argsort(1)).argsort(1) # Ranks for all cols
Out[29]: 
array([[0, 1, 2, 3],
       [1, 0, 2, 3],
       [3, 2, 0, 1]])

In [30]: (a.argsort(1)).argsort(1)[:,0] # Rank for first col
Out[30]: array([0, 1, 3])

In [31]: (a.argsort(1)).argsort(1)[:,1] # Rank for second col
Out[31]: array([1, 0, 2])