gpt4 book ai didi

python - 处理来自 python Numpy 数组 : Using values from one column to sum over adjacent value 的数据

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:14 25 4
gpt4 key购买 nike

这是我的数据:

a = np.array([[1,2],[2,1],[7,1],[3,2]])

我想对此处第二行中的每个数字求和。因此,在示例中,第二列中有两个可能的值:1 和 2。

我想对第一列中与第二列中具有相同值的所有值求和。有内置的 numpy 函数吗?

例如,第二列中每个 1 的总和为:2 + 7 = 9

最佳答案

一个简短但有点狡猾的方法是通过 numpy 函数 bincount:

np.bincount(a[:,1], weights=a[:,0])

它的作用是计算数组中 0、1、2 等的出现次数(在本例中,a[:,1] 是类别编号的列表) .现在,weights 将计数乘以某个权重,在本例中是您在列表中的第一个值,本质上是通过这种方式求和。

它返回的是这样的:

array([ 0.,  9.,  4.])

其中 0 是第一个元素的总和,第二个元素是 0,依此类推...因此,只有当您分组的第二个数字是整数时,它才会起作用。

如果它们不是从0开始的连续整数,你可以通过以下方式选择你需要的:

np.bincount(a[:,1], weights=a[:,0])[np.unique(a[:,1])]

这将返回

array([9.,  4.])

这是一个总和数组,按第二个元素排序(因为 unique 返回一个排序列表)。


如果你的第二个元素不是整数,首先你会因为 floating point arithmetic 而陷入某种麻烦。 (您认为相同的元素实际上可能不同)。但是,如果您确定它没问题,您可以对它们进行排序并为它们分配整数(例如使用 scipy 的 rank 函数):

ind = rd(a[:,1], method = 'dense').astype(int) - 1 # ranking begins from 1, we need from 0
sums = np.bincount(ind, weights=a[:,0])

这将返回 array([9., 4.]),按第二个元素排序。您可以压缩它们以将总和与适当的元素配对:

zip(np.unique(a[:,1]), sums) 

关于python - 处理来自 python Numpy 数组 : Using values from one column to sum over adjacent value 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21518186/

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