gpt4 book ai didi

python - 如何获取 numpy 二维数组中列的排名?

转载 作者:行者123 更新时间:2023-11-30 22:51:01 25 4
gpt4 key购买 nike

假设我有一个数组:

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])

关于python - 如何获取 numpy 二维数组中列的排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39140490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com