gpt4 book ai didi

python - 如何在不循环的情况下顺序更新 Numpy 数组

转载 作者:行者123 更新时间:2023-11-30 23:19:30 25 4
gpt4 key购买 nike

我有一个 Numpy 数组 v,我想使用数组当前元素上的函数来更新每个元素:

v[i] = f(v, i)

执行此操作的基本方法是使用循环

for i in xrange(2, len(v)):
v[i] = f(v, i)

因此,用于更新v[i]的值是更新后的数组v。有没有办法在没有循环的情况下进行这些更新?

例如,

v = [f(v, i) for i in xrange(len(v))]

不起作用,因为v[i-1]在综合列表中使用时不会更新。

I函数f可以依赖于列表中的多个元素,索引小于i的元素应该被更新,索引大于i的元素尚未更新,如下例所示:

v = [1, 2, 3, 4, 5]
f = lambda v, i: (v[i-1] + v[i]) / v[i+1] # for i = [1,3]
f = lambda v, i: v[i] # for i = {0,4}

它应该返回

v = [1, (1+2)/3, (1+4)/4, ((5/4)+4)/5, 5]

最佳答案

有一个函数可以做到这一点:

import numpy

v = numpy.array([1, 2, 3, 4, 5])

numpy.add.accumulate(v)
#>>> array([ 1, 3, 6, 10, 15])

这适用于许多不同类型的 ufunc:

numpy.multiply.accumulate(v)
#>>> array([ 1, 2, 6, 24, 120])

对于进行这种累加的任意函数,您可以创建自己的 ufunc,尽管这会慢得多:

myfunc = numpy.frompyfunc(lambda x, y: x + y, 2, 1)
myfunc.accumulate([1, 2, 3], dtype=object)
#>>> array([1, 3, 6], dtype=object)

关于python - 如何在不循环的情况下顺序更新 Numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26045018/

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