从分布的混合中采样(在其中添加了一些系数为c_1,c_2,…,c_n的PDF)相当于分别独立采样,然后对于每个索引,以概率c_k从第k个样本中选择值。
后者的混合步骤可以有效地完成
numpy.random.choice。这是混合三个分布的示例。分布在中列出
distributions,系数在中列出
coefficients。有一个胖正态分布,一个均匀分布和一个狭窄的正态分布,系数为0.5、0.2、0.3。根据给定的系数,混合发生在
data[np.arange(sample_size),random_idx]之后
random_idx。
import numpy as npimport matplotlib.pyplot as pltdistributions = [ {"type": np.random.normal, "kwargs": {"loc": -3, "scale": 2}}, {"type": np.random.uniform, "kwargs": {"low": 4, "high": 6}}, {"type": np.random.normal, "kwargs": {"loc": 2, "scale": 1}},]coefficients = np.array([0.5, 0.2, 0.3])coefficients /= coefficients.sum() # in case these did not add up to 1sample_size = 100000num_distr = len(distributions)data = np.zeros((sample_size, num_distr))for idx, distr in enumerate(distributions): data[:, idx] = distr["type"](size=(sample_size,), **distr["kwargs"])random_idx = np.random.choice(np.arange(num_distr), size=(sample_size,), p=coefficients)sample = data[np.arange(sample_size), random_idx]plt.hist(sample, bins=100, density=True)plt.show()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)