带有numpy的Python中的高级直方图用法

时间:2018-11-28 09:35:49

标签: python numpy

我需要快速处理大量数据,因此理想情况下,我想使用诸如numpy之类的快速方法。我通常只写一个循环,但是python太慢了。这是问题所在:

我想根据另一个数组的仓位求和。例如,我有三个数组

weights = [100, 130, 112, 150]
ages = [1, 14, 15, 25]

我想根据被归类为0-9、10-19、20-29的垃圾箱的年龄对权重求和。所以我得到[100,130 + 112,150]-> [100,242,150]作为我的最终结果。

我对numpy's histograms的当前理解是,我只能对与之合并的数组求和。意味着如果我将年龄段加总,我只能得到年龄段的总和。

我还想知道如何做得好,将来可能需要除求和以外的其他操作(例如对它们求平均值而不是单纯的求和)。谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这可以非常简单地通过列表理解和一些numpy逻辑函数来完成,并且不仅限于求和。

import numpy as np

ages = [1, 14, 15, 25]
weights = np.array([100, 130, 112, 150])  # easier indexing with a np.array
bin_left_marks = np.arange(0, 40, 10)
my_func = np.sum
my_binned_aggregation = [my_func(weights[np.where(np.logical_and(bin_left_marks[i] <= ages, ages < bin_left_marks[i+1]))]) for i in range(len(bin_left_marks) - 1)]

基本上,对于每个垃圾箱,找到与该垃圾箱匹配的年龄列表的索引,并相应地汇总权重列表。
祝你好运!


显然,可以通过拆分该单线,使用直接循环等来“减少丑陋”的事情。这种解决方案是为了简洁。