当前位置:  开发笔记 > 编程语言 > 正文

使用Numpy或Scipy的累积产品

如何解决《使用Numpy或Scipy的累积产品》经验,为你挑选了1个好方法。

我有一个1-D numpy数组,我希望将其转换为累积产品.一个天真的实现是这样的:

import numpy as np
arr = [1,2,3,4,5,6,7,8,9,10]
c_sum = [np.prod(arr[:i]) for i in range(1, len(arr) + 1)]
# c_sum = [1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]

然而,当尺寸arr变得非常大时,这可能会变慢.我怀疑使用其中一个NumpyScipy阵列魔法可能会有更有效的方法.有人可以告诉我该怎么做吗?



1> MSeifert..:

你可以使用numpy.cumprod:

>>> np.cumprod(arr)
array([      1,       2,       6,      24,     120,     720,    5040,
         40320,  362880, 3628800], dtype=int32)

万一你不想使用numpy而你宁愿留在纯python中(也许是因为你想要pythons无限精度整数并且不太关心速度)你也可以使用itertools.accumulate:

>>> import itertools
>>> import operator

>>> list(itertools.accumulate(arr, operator.mul))
[1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]

注意:该itertools.accumulate函数需要python3.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有