对本身位于元组中的元组(可迭代的可迭代)求和的最有效方法是啥?
Posted
技术标签:
【中文标题】对本身位于元组中的元组(可迭代的可迭代)求和的最有效方法是啥?【英文标题】:What is the most efficient way to sum across tuples that are themselves within a tuple (iterable of an iterable)?对本身位于元组中的元组(可迭代的可迭代)求和的最有效方法是什么? 【发布时间】:2019-12-03 03:11:07 【问题描述】:本质上,我正在生成一个元组:
import datetime
import csv
from itertools import product, combinations, chain
part_1 =
'a':2,1,0,
'b':3,4,5,
'c':7,8,9,
'd':10,11,12
sorted_part_1 = sorted(part_1)
result = product(*(part_1[Thing] for Thing in sorted_part_1))
# for a in result:
# print('comb a' + str(a))
comb_list_total = it.combinations(result,4)
(虽然有几个订单更多的排列。)
我想做的是对每个元组/可迭代求和,例如((2, 5, 9, 11), (2, 5, 9, 12), (2, 5, 7, 10), (2, 5, 7, 11))
--> (8,20,32,44)
(我实际上想要做的是然后得到聚合元组和预定义元组之间的差异,例如 (50,50,50,50) -> (32,30,18,6)最后,对差异求和,以确定哪个元组最大化/最小化聚合差异。)
如何对元组执行此数学运算,并有效地将结果映射到原始元组?
【问题讨论】:
你介意使用 pandas/numpy 吗? 由于您要求和的元组是组合生成的,我会寻找一种数学方法来简化总和,而无需显式计算它。如果我们能够计算出product
中的每个组合应该出现在结果中的次数,那么我们可以乘法而不是加法;同样,如果我们可以计算part_1
中的每个数字应该出现在总和中的次数。
【参考方案1】:
先决条件:
iterable_of_tuples = [
(...), # tuple 1
(...), # tuple 2
...
(...) # tuple N
]
使用 numpy:
import numpy as np
sum_of_all_tuples = tuple(sum(np.array(t) for t in iterable_of_tuples))
纯 Python(对长迭代可能效率较低):
sum_of_all_tuples = tuple(map(sum, zip(*iterable_of_tuples))))
【讨论】:
以上是关于对本身位于元组中的元组(可迭代的可迭代)求和的最有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章