如何用Numpy按列生成均值0、标准差1的高斯噪声矩阵
生成按列满足均值0、标准差1的高斯噪声矩阵(无循环高性能实现)
原代码用np.random.normal生成的噪声只是整体趋近均值0,但没法保证每一列严格满足均值0、标准差1的要求。下面用numpy的向量化操作实现无循环的高性能方案:
实现代码
import numpy as np A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 先生成和A同形状的初始随机噪声 noise = np.random.normal(size=A.shape) # 按列计算均值和总体标准差(ddof=0对应总体标准差,和np.random.normal的std定义匹配) col_means = noise.mean(axis=0) col_stds = noise.std(axis=0, ddof=0) # 按列标准化:减去列均值,再除以列标准差,得到每列均值0、标准差1的噪声 normalized_noise = (noise - col_means) / col_stds
验证效果
可以加一段代码验证每列的均值和标准差:
# 打印每列均值(应接近[0, 0, 0]) print("每列均值:", normalized_noise.mean(axis=0)) # 打印每列标准差(应接近[1, 1, 1]) print("每列标准差:", normalized_noise.std(axis=0, ddof=0))
原理说明
- 利用numpy的
axis=0参数直接按列计算统计量,全程无循环,完全发挥numpy的向量化性能优势 - 标准化公式
(数据 - 列均值)/列标准差是统计学标准操作,能将任意分布的列数据转换为均值0、标准差1的标准正态分布,完美满足需求
内容的提问来源于stack exchange,提问作者skm
相关产品推荐
相关产品推荐

