Python是否有Matlab lhsnorm函数的等效实现?需生成正态分布分层随机样本
Python中实现Matlab
lhsnorm的等效分层正态抽样 当然有啦!在Python里,你可以通过几种方式实现和Matlab中lhsnorm完全等效的分层正态抽样功能,下面给你两种实用方案:
方案一:使用pyDOE2库(简单高效)
pyDOE2是专门用于试验设计的Python库,其中的lhs函数可以生成均匀分布的拉丁超立方样本,我们只需要将其转换为正态分布即可,逻辑和Matlab的lhsnorm完全一致。
步骤:
- 先安装
pyDOE2:
pip install pyDOE2
- 实现等效函数(支持独立变量和协方差矩阵两种场景):
import numpy as np from scipy.stats import norm from scipy.linalg import cholesky from pyDOE2 import lhs def lhsnorm(mu, sigma_or_cov, n): dim = len(mu) # 生成均匀分布的拉丁超立方样本 lhs_uniform = lhs(dim, samples=n) # 转换为标准正态样本 lhs_standard = norm.ppf(lhs_uniform) # 判断输入是标准差向量还是协方差矩阵 if sigma_or_cov.ndim == 1: # 独立变量,直接缩放+平移 lhs_normal = mu + lhs_standard * sigma_or_cov else: # 协方差矩阵,通过Cholesky分解转换 L = cholesky(sigma_or_cov, lower=True) lhs_normal = mu + lhs_standard @ L.T return lhs_normal # 示例1:独立变量场景 mu = np.array([0, 2]) sigma = np.array([1, 3]) n_samples = 10 sample_independent = lhsnorm(mu, sigma, n_samples) print("独立变量分层正态样本:\n", sample_independent) # 示例2:带协方差矩阵的场景 cov_matrix = np.array([[1, 0.4], [0.4, 2]]) sample_cov = lhsnorm(mu, cov_matrix, n_samples) print("带协方差的分层正态样本:\n", sample_cov)
方案二:手动实现(无需额外第三方库)
如果你不想安装额外库,可以手动实现拉丁超立方抽样的逻辑,再转换为正态分布:
import numpy as np from scipy.stats import norm from scipy.linalg import cholesky def lhsnorm_manual(mu, cov_matrix, n): dim = len(mu) lhs_uniform = np.zeros((n, dim)) # 生成拉丁超立方均匀样本 for idx in range(dim): # 将[0,1]区间分成n个等宽分块 bin_edges = np.linspace(0, 1, n + 1) # 每个分块内随机取一个点 lhs_uniform[:, idx] = np.random.uniform(bin_edges[:-1], bin_edges[1:], size=n) # 打乱该列数据,保证拉丁超立方的"每层仅取一个样本"特性 np.random.shuffle(lhs_uniform[:, idx]) # 转换为标准正态分布样本 lhs_standard = norm.ppf(lhs_uniform) # 通过Cholesky分解将标准正态转换为指定协方差的正态分布 L = cholesky(cov_matrix, lower=True) lhs_normal = mu + lhs_standard @ L.T return lhs_normal # 示例使用 mu = np.array([1, -1]) cov = np.array([[2, 0.5], [0.5, 1]]) n = 8 sample = lhsnorm_manual(mu, cov, n) print("手动实现的分层正态样本:\n", sample)
补充说明
Matlab的lhsnorm核心逻辑就是先生成拉丁超立方的均匀分布样本,再通过正态分布的逆累积分布函数(PPF)转换为正态样本,最后处理协方差结构,上面的两种方案完全遵循这个逻辑,和Matlab的输出特性一致。
内容的提问来源于stack exchange,提问作者OKJN
相关产品推荐
相关产品推荐

