如何编写递归函数以生成大小为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))
我对递归函数没有任何经验,这就是为什么我不能提供试图解决此问题的任何代码的原因。
答案 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]