我需要快速处理大量数据,因此理想情况下,我想使用诸如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的当前理解是,我只能对与之合并的数组求和。意味着如果我将年龄段加总,我只能得到年龄段的总和。
我还想知道如何做得好,将来可能需要除求和以外的其他操作(例如对它们求平均值而不是单纯的求和)。谢谢您的帮助。
答案 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)]
基本上,对于每个垃圾箱,找到与该垃圾箱匹配的年龄列表的索引,并相应地汇总权重列表。
祝你好运!
显然,可以通过拆分该单线,使用直接循环等来“减少丑陋”的事情。这种解决方案是为了简洁。