如何在Python中生成指定形状的正态分布Sobol序列数组?
使用Scipy的MultivariateNormalQMC生成指定形状的正态分布序列
要生成和Z = np.random.normal(0.0, 1.0, [5, 10, 4])等价的Sobol序列正态分布数组,核心是理解MultivariateNormalQMC的输出结构,再通过重塑形状匹配目标维度,具体实现如下:
核心逻辑
MultivariateNormalQMC.random(n_samples)会输出(n_samples, dim)形状的数组,其中dim对应多元正态分布的维度(即目标数组的最后一维4)。目标数组的总独立样本数为5*10=50,生成后将结果重塑为(5,10,4)即可。
代码实现
import numpy as np from scipy.stats.qmc import MultivariateNormalQMC # 定义标准多元正态参数:4维全0均值,4x4单位协方差矩阵(保证各维度独立同分布) mean = np.zeros(4) cov = np.eye(4) # 初始化基于Sobol序列的多元正态QMC生成器 mvn_qmc = MultivariateNormalQMC(mean=mean, cov=cov, engine="sobol") # 生成50个4维样本(对应目标数组的5*10个元素组) samples = mvn_qmc.random(n_samples=5*10) # 重塑为目标形状(5,10,4) Z_qmc = samples.reshape(5, 10, 4) # 验证形状 print(Z_qmc.shape) # 输出: (5, 10, 4)
关键说明
engine="sobol"显式指定使用Sobol序列(这是MultivariateNormalQMC的默认引擎,可省略,但声明后更清晰)。- 单位协方差矩阵
np.eye(4)确保每个维度的变量独立服从标准正态,和np.random.normal的行为完全一致。 - 重塑形状时保留最后一维的维度不变,前两维按目标结构拆分总样本数即可。
内容的提问来源于stack exchange,提问作者MBlrd
相关产品推荐
相关产品推荐

