是否可以对每个元素都依赖于前一个元素的NumPy数组进行矢量化递归计算?

发布于 2021-01-29 19:32:15

T(i) = Tm(i) + (T(i-1)-Tm(i))**(-tau(i))

Tmtau是先前已计算出的相同长度的NumPy向量,因此需要创建一个新向量T。在i它只是为了说明什么是想要的元素索引。

在这种情况下是否需要for循环?

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可能认为这会起作用:

    import numpy as np
    n = len(Tm)
    t = np.empty(n)
    
    t[0] = 0  # or whatever the initial condition is 
    t[1:] = Tm[1:] + (t[0:n-1] - Tm[1:])**(-tau[1:])
    

    但事实并非如此:您实际上无法以这种方式在numpy中进行递归(因为numpy计算了整个RHS,然后将其分配给LHS)。

    因此,除非您可以提出该公式的非递归版本,否则您将陷入显式循环:

    tt = np.empty(n)
    tt[0] = 0.
    for i in range(1,n):
        tt[i] = Tm[i] + (tt[i-1] - Tm[i])**(-tau[i])
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看