我正在尝试创建一个二维数组,它具有特定的min、max、mean和stddev。长话短说,我正在尝试使用这两种方法
np.random.randint(min,max, size=(row,col)
np.random.normal(mu,sigma, size=(row,col) 在同一时间。有没有人知道是否已经为此创建了一个函数?我有一个标准差匹配函数,但它也改变了数组的最小和最大值,不幸的是,这也可能是另一种方法。
发布于 2021-11-12 21:22:05
您可以使用均匀分布,将边界从法线转换为均匀空间(使用error function),并使用反向误差函数将其转换为正态分布。
import matplotlib.pyplot as plt
import numpy as np
from scipy import special
mean = 2
std = 3
min_value = 0
max_value = 6
min_in_standard_domain = (min_value - mean) / std
max_in_standard_domain = (max_value - mean) / std
min_in_erf_domain = special.erf(min_in_standard_domain)
max_in_erf_domain = special.erf(max_in_standard_domain)
random_uniform_data = np.random.uniform(min_in_erf_domain, max_in_erf_domain, 10000)
random_gaussianized_data = (special.erfinv(random_uniform_data) * std) + mean
fig, axes = plt.subplots(1, 2, figsize=(12, 6))
axes[0].hist(random_uniform_data, 30)
axes[1].hist(random_gaussianized_data, 30)
axes[0].set_title('uniform distribution samples')
axes[1].set_title('erfinv(uniform distribution samples)')
plt.show()

https://stackoverflow.com/questions/69932063
复制相似问题