如何在python中执行随机参数MC扫描?

How to perform a random parameter MC scan in python?

我必须对假设 x、y、z 在范围 x->(4, 8), y->(-5, 7), z->(1 ,9) 对于这些给定范围内的 4000 个随机参数点,我必须确定一些由 x、y、z 定义的函数的值。那么,如何在 python 中对这样的问题进行 MC 扫描,并将这些不同的数据集直接输入到我的程序中?

因为 Monte Carlo 只是在函数中输入数字,然后看看有什么问题,所以这在 vanilla Python.

中就像这样
import random

def fun(x, y, z):
    return (x * y) + z

trials = []

for i in range(4000):
    x = random.uniform(4, 8)
    y = random.uniform(-5, 7)
    z = random.uniform(1, 9)
    value = fun(x, y, z)
    trials.append(((x, y, z), value))

如果需要,您可以通过在 numpy 中预生成所有 x/y/z 值来加快速度:

import numpy as np

def random_range(n, min, max):
    return min + np.random.random(n) * (max - min)


def fun(x, y, z):
    return (x * y) + z


x = random_range(4000, 4, 8)
y = random_range(4000, -5, 7)
z = random_range(4000, 1, 9)

trial_args = np.stack((x, y, z), axis=-1)
for x, y, z in trial_args:
    print(x, y, z, '=>', fun(x, y, z))

(可能还有一种方法可以让 Numpy 调用 fun。)