gpt4 book ai didi

python - 如何编写一个函数来仅计算类数组对象的前 n 项并返回它们的和?

转载 作者:行者123 更新时间:2023-12-01 08:53:26 24 4
gpt4 key购买 nike

假设我有一个如下数组:

A = np.array([a,b,c,d,e,f])

数组中的每个元素都有一个等于标量的值(例如,a 可能等于 2,b 等于 7,等等)。但是 ab 需要很长时间来计算,因此 Python 可能需要几分钟才能确定值 a,更多的时间来确定 b 的值,对于其余元素也是如此。

是否有办法定义一个函数(我们称之为 sumfirstn)来计算 A 的前 n 项并计算它们的总和?例如,sumfirstn(A,2) 将返回 a+bsumfirstn(A,3) 将返回 a+b +c

但是(这一点很重要)sumfirstn(A,2) 必须评估cdef。它必须评估正在添加的相关项(以减少计算时间)。当然,A[0:n].sum() 可以解决这个问题,但这需要 Python 计算整个数组 A,而我不想这样做!

有什么想法吗? A 不一定是数组,可以是列表、数据框或其他某种形式......无论什么都行。

最佳答案

看起来您需要一个通用的解决方案来对任何可迭代的前n项进行求和,它不一定必须支持索引、切片或求和 方法。

如果我理解正确,以下应该足以作为通用解决方案。

>>> from itertools import islice
>>>
>>> def first_n_sum(iterable, n):
... return sum(islice(iterable, n))

演示:

>>> first_n_sum([1,2,3,4], 3)
6
>>> first_n_sum((x for x in (1, 2, 3, 4)), 2)
3
>>> first_n_sum([], 123)
0
>>> from collections import OrderedDict
>>> first_n_sum(OrderedDict([(1, 'a'), (2, 'b'), (-3, 'c'), (100, 'd')]), 3)
0

请注意,如果可迭代对象无法生成 n 个值,则不会出现错误,就像切片超出数组长度是可以的一样。在这种情况下,将返回所有元素的总和。

关于python - 如何编写一个函数来仅计算类数组对象的前 n 项并返回它们的和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52952774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com