【问题标题】:Replace a old code by a more efficient code用更高效的代码替换旧代码
【发布时间】:2018-11-13 16:15:41
【问题描述】:

我需要根据旧的数字序列z_ta_0创建一个数字序列a_ta_t 定义为等于27 if t=0a(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_0z_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,因此计算速度可能更快。

【问题讨论】:

  • 这个a_t怎么用?

标签: python numpy generator sequence logarithm


【解决方案1】:

是的,

您可以使用 np.cumsum(z) 创建一个和数组,其中包含 sum(z_i) 和 np.exp() 再次计算您想要的结果,然后将其与 a_0 相乘。

a_0 = 27
z = np.array([1,2,3])
cs = np.cumsum(z)
result = np.exp(cs)*a_0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多