python 中作为参数的随机数生成函数

random number generating function as argument in python

我想将一个生成随机正态数的函数传递给另一个函数,进行一些计算并再次传递随机函数 x 次。最后应该有一个包含 x 列的 Dataframe,其中包含不同的随机生成结果。

我的代码如下所示:

timeframe = 10
nr_simulations = 10
mean_vec = np.random.rand(10)
cov_mat = np.random.rand(10,10)
r_n = np.zeros((timeframe, nr_simulations))

def test_function(func, timeframe, nr_simulations):
    for i in range(0, nr_simulations):
        r_n[:,i] = func.mean(axis=1)


def simulate_normal_numbers(mean_vec, cov_mat, timeframe):
    return np.random.multivariate_normal(mean_vec, cov_mat, timeframe)

但这给了我总是相同的列。

test_function(simulate_normal_numbers(mean_vec, cov_mat, timeframe), timeframe, nr_simulations)

问题是您的 np.random.rand(...) 语句在函数被调用之前已经被评估。如果每次调用函数时都需要新的随机数,则需要在函数中调用 np.random.rand(...)

我认为你不能那样传递函数。您应该分别传递函数和参数

类似

import numpy as np
timeframe = 10
nr_simulations = 10
mean_vec = np.random.rand(10)

cov_mat =  np.random.rand(10,10)
cov_mat = np.maximum( cov_mat, cov_mat.transpose() )
r_n = np.zeros((timeframe, nr_simulations))

def test_function(func, timeframe, nr_simulations, arg):
    for i in range(0, nr_simulations):
        r_n[:,i] = func(*arg).mean(axis=1)



def simulate_normal_numbers(mean_vec, cov_mat, timeframe):
    return np.random.multivariate_normal(mean_vec, cov_mat, timeframe)

test_function(simulate_normal_numbers , timeframe, nr_simulations,arg = (mean_vec, cov_mat, timeframe))
print(r_n)

请注意,cov 矩阵应该是对称且正的。