在Python中高效遍历数组元素

1 投票
2 回答
665 浏览
提问于 2025-04-17 02:04

我正在尝试高效地根据特征对不同的数据数组中的元素进行求和。我有三个特征(年龄、年份和原因),每个特征在一个数组中都有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)

但是,经过60000次迭代后,这个过程非常慢。问题在于,这些数组的形状不一定都是一样的。有没有什么好的建议?

2 个回答

2

我建议你可以使用类似于 accumarray 的方法。你的输出应该是一个三维的数据立方体,每个维度对应一个变量(比如年龄、年份、原因)。在每个维度中的每个索引对应你输入列表中的一个独特值。然后你可以使用类似于这个食谱示例的方法,把数据集的变量根据年龄、年份和原因放到合适的分类中。

你也可以考虑使用一个合适的关系型数据库。这种数据库在处理这些事情时非常快。Python 自带了sqlite3,这是核心的一部分。不过,如果你之前没有接触过关系型数据库,学习起来会有点难。你需要使用 groupaggregate 这些功能。

0

请看下面的链接

我不太确定怎么把另一个答案正确地链接到这个答案上。当我尝试用一句话加上链接时,它把我的答案变成了评论。现在我在这里啰嗦,希望让Stack Overflow觉得这段文字足够长,可以算作一个答案。这里有一个关于这个问题的很好的答案链接。

用Python按特征求数组的和

撰写回答