首页 > 解决方案 > 使用 mean、min、max 和 stddev 创建 2D 数据集

问题描述

我正在尝试创建一个具有特定最小值、最大值、平均值和标准差的二维数组。长话短说,我正在尝试同时使用两者

np.random.randint(min,max, size=(row,col)
np.random.normal(mu,sigma, size=(row,col) 

同时。有谁知道是否已经为此制作了一个功能?我有一个标准偏差匹配函数,但不幸的是它也改变了数组的最小值和最大值,这也可能是另一种方法。

标签: pythonnumpymultidimensional-arraystatistics

解决方案


您可以使用边界从正常空间“转换”到均匀空间的均匀分布(使用误差函数),并使用逆误差函数将其转换为正态分布。

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()

在此处输入图像描述


推荐阅读