如何编写在Python中递归生成矢量的函数?

时间:2019-01-11 14:20:27

标签: python recursion

如何编写递归函数以生成大小为X的向量(1,n),如下所示,其中X_i是第i个条目:

X_1 = Z_1 * E_1
X_i = max{B_(1,i) * X_1, ... , B_((i-1),i) * X_(i-1), Z_i} * E_i,  i = 2,...,n,

其中

Z = np.random.normal(0, 1,size = n)
E = np.random.lognormal(0, 1, size = n)
B = np.random.uniform(0,1,(n,n))

我对递归函数没有任何经验,这就是为什么我不能提供试图解决此问题的任何代码的原因。

2 个答案:

答案 0 :(得分:0)

如果您使用的是numpy,请使用numpy的全部功能,而不仅是random模块;)

如果使用向量,则无需考虑递归并使用numpy的向量化操作。例如,np.max为您提供一个轴上的最大值,np.dot为您提供逐元素的乘法。您还可以使用np.prod来表示给定轴上的数组元素的乘积...这些只是可能非常适合您问题的示例。有关完整的文档,请https://docs.scipy.org/doc/numpy/

答案 1 :(得分:0)

我明白了,不需要像第一个评论中的@meowgoesthedog那样递归。

import numpy as np

s=1000  # sample size
n=5

Z = np.random.normal(0, 1,size = (s,n))

B = np.random.uniform(0,1,(n,n))
E = np.random.lognormal(0, 1, size = (s,n))

X = np.zeros((s,n))

X[:,0] = Z[:,0]*E[:,0]

for k in range(s):
    for l in range(1,n):
        X[k,l] = max(np.max(X[k,:(l)] * B[:(l),l]), Z[k,l]) * E[k,l]