Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用更高效的代码替换旧代码_Python_Numpy_Generator_Sequence_Logarithm - Fatal编程技术网

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