gpt4 book ai didi

python - numpy group by,返回按结果排序的原始索引

转载 作者:行者123 更新时间:2023-12-04 14:03:41 31 4
gpt4 key购买 nike

我有这样的数组:

array([[2, 1],
[3, 5],
[2, 1],
[4, 2],
[2, 3],
[5, 3]])

我想做的是按第一列“分组”求和,然后按第二列排序:

array([[2, 5],
[3, 5],
[5, 3],
[4, 2]])

问题来了,我还想从每一行的原始数组中取回索引在结果数组中,排序:

     2       3     5    4
[[0,2,4], [1], [5], [3] ]

或者,如果它很容易……我需要获得前 N 个索引……比如说前 2 个:

     2       3    
[0,2,4, 1]

没有 pandas,只有纯 numpy。

顺便说一句,我只需要前 N 个项目及其索引..这可以简化加速过程


尝试应用其中的任何一个:

https://izziswift.com/is-there-any-numpy-group-by-function

最佳答案

遗憾的是 Numpy 中没有分组依据,但您可以使用 np.unique 来查找唯一元素及其索引,这足以实现您的需要。已识别的键之一,您可以使用 np.add.at 执行基于键的缩减。对于按值排序,您可以使用 np.argsort。参见 this postthis one获取更多信息。

keys, index = np.unique(df[:,0], return_inverse=True) # Find the unique key to group
values = np.zeros(len(keys), dtype=np.int64) # Sum-based accumulator
np.add.at(values, index, df[:,1]) # Key-based accumulation
tmp = np.hstack([keys[:,None], values[:,None]]) # Build the key-sum 2D array
res = tmp[tmp[:, 1].argsort()[::-1]] # Sort by value

请注意,索引可以很容易地从 index 变量(这是一个反向索引)中获得。无法使用 Numpy 构建它,但可以使用一个简单的 python 循环,在每个键 keys[index[i]]< 中存储在字典中的列表中累积索引 i/。这是一个例子:

from collections import defaultdict
d = defaultdict(list)
for i in range(len(df)): d[keys[index[i]]].append(i)

关于python - numpy group by,返回按结果排序的原始索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69228055/

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