用更高效的代码替换旧代码
Replace a old code by a more efficient code
我需要根据旧的数字序列 z_t
和 a_0
创建数字序列 a_t
。 a_t
定义为等于 27 if t=0
或 a(t-1)exp(z(t-1)) for 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
编码以下序列以进行矢量化,即 a_t = a_0 exp(sum(z_i))
用于 i=0 to t-1
?计算速度可能更快,因为我们已经知道序列 z_t
.
是的,
您可以使用 np.cumsum(z) 创建一个带有 sum(z_i) 和 np.exp() 的 and 数组,再次计算您想要的结果,然后乘以a_0.
a_0 = 27
z = np.array([1,2,3])
cs = np.cumsum(z)
result = np.exp(cs)*a_0
我需要根据旧的数字序列 z_t
和 a_0
创建数字序列 a_t
。 a_t
定义为等于 27 if t=0
或 a(t-1)exp(z(t-1)) for 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
编码以下序列以进行矢量化,即 a_t = a_0 exp(sum(z_i))
用于 i=0 to t-1
?计算速度可能更快,因为我们已经知道序列 z_t
.
是的,
您可以使用 np.cumsum(z) 创建一个带有 sum(z_i) 和 np.exp() 的 and 数组,再次计算您想要的结果,然后乘以a_0.
a_0 = 27
z = np.array([1,2,3])
cs = np.cumsum(z)
result = np.exp(cs)*a_0