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

当结果依赖于前一个单元格时,如何将函数应用于数组的每个元素

如何解决《当结果依赖于前一个单元格时,如何将函数应用于数组的每个元素》经验,为你挑选了1个好方法。



1> awesoon..:

您正在寻找Haskell scanl1在Python中的替代方案(Haskell示例):

Prelude> scanl1 (\a  b -> a + (b - a) * 0.5) [2, 3, 5, 8, 3, 5]
[2.0,2.5,3.75,5.875,4.4375,4.71875]

模块中有一个accumulate功能itertools:

In [1]: import itertools

In [2]: itertools.accumulate([2, 3, 5, 8, 3, 5], lambda a, b: a + (b - a) * 0.5)
Out[2]: 

In [3]: list(itertools.accumulate([2, 3, 5, 8, 3, 5], lambda a, b: a + (b - a) * 0.5))
Out[3]: [2, 2.5, 3.75, 5.875, 4.4375, 4.71875]

使用NumPy,您可以使用numpy.ufunc.accumulate函数,但是,根据这个答案,实现中存在一个错误,这就是我们应该使用强制转换的原因.不幸的是,我对NumPy不是很熟悉,而且可能有更好的方法:

In [9]: import numpy as np

In [10]: uf = np.frompyfunc(lambda a, b: a + (b - a) * 0.5, 2, 1)

In [11]: uf.accumulate([2,3,5,8,3,5], dtype=np.object).astype(np.float)
Out[11]: array([ 2.     ,  2.5    ,  3.75   ,  5.875  ,  4.4375 ,  4.71875])

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