Так как Монте-Карло просто набрасывает числа в функции и видит, что прилипает, это как-то так в ванили 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))
Если вы хотите, вы, вероятно, можете ускорить процесс предварительное создание всех значений x / y / z в numpy:
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 call fun
.)