在python中有效地循环遍历数组元素

时间:2011-09-12 02:27:32

标签: python arrays performance numpy

我试图通过它们的特性有效地对单独数据数组的元素求和。我在给定的数组中有三个识别特征(年龄,年份和原因),对于每个年龄,年份,原因,我有1000个值。当特征相同时,我需要将这些值添加到另一个数据数组。现在,我正在做这样的事情,每个数据集都是〜(80000,1000):

import numpy as np
datasets = np.vstack(dataset1, dataset2)
for a in ages:
    for y in years:
        for c in causes:
             output = np.sum(datasets[(age==a) & (year==y) & (cause==c)], axis = 0)

但是,通过60,000次迭代,这非常慢。挑战在于阵列不一定都具有相同的形状。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我推荐像accumarray这样的东西。您的输出应该是一个三维数据立方体,其中每个维度对应一个变量(年龄,年份,原因)。每个维度中的每个索引都对应于输入列表中的唯一值。然后,您可以使用类似cookbook example之类的内容,使用年龄,年份和原因将数据集变量累积到相应的bin中。

您也可以考虑使用适当的关系数据库。他们在这些事情上都很快。 Python附带sqlite3作为核心的一部分。不幸的是,如果您之前从未使用过关系数据库,那么这是一个相当陡峭的学习曲线。您需要使用groupaggregate功能。

答案 1 :(得分:0)

见下面的链接

我不确定如何正确地将这个答案的另一个答案联系起来。当我尝试一个句子后跟链接时,它将答案转换为评论。我现在感到很啰嗦,试图让堆栈溢出认为这个文本足够长,可以构成一个答案。这是这个问题的一个很好的答案的链接。

Summing Arrays by Characteristics in Python

相关问题