如何在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
。)
我必须对假设 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
。)