Python 用更高效的代码替换旧代码
我需要根据旧的数字序列Python 用更高效的代码替换旧代码,python,numpy,generator,sequence,logarithm,Python,Numpy,Generator,Sequence,Logarithm,我需要根据旧的数字序列z\ut和a\u 0创建一个数字序列a\u ta_t的定义等于27;如果t>=1,则定义为a(t-1)exp(z(t-1)) 在使用生成器时,该代码非常简单 import math def a_t(zs, a=27): z = next(zs) yield a for z in zs: a *= math.exp(z) yield a 似乎可以只使用a_0和z_t-1,z_t-2,…,z0上的和,而不是等待a_t-
z\ut
和a\u 0
创建一个数字序列a\u t
<如果t=0,则code>a_t的定义等于27;如果t>=1,则定义为a(t-1)exp(z(t-1))
在使用生成器时,该代码非常简单
import math
def a_t(zs, a=27):
z = next(zs)
yield a
for z in zs:
a *= math.exp(z)
yield a
似乎可以只使用a_0
和z_t-1,z_t-2,…,z0
上的和,而不是等待a_t-1
来计算a_t
。因此,可以将计算矢量化,而不是逐个计算a_i
。是否可以使用numpy
对以下序列进行编码,以实现矢量化,即i=0到t-1的a_t=a_0 exp(总和(z_i))
?计算起来可能更快,因为我们已经知道了序列z_t
是的
您可以使用np.cumsum(z)创建一个and数组,再次使用sum(z_i)和np.exp()计算所需的值,然后将其与一个_0相乘
a_0 = 27
z = np.array([1,2,3])
cs = np.cumsum(z)
result = np.exp(cs)*a_0
如何使用此a\u t
?