如何使用Numpy创建指定形式的离散正态分布数组?
生成离散正态分布数组的方法
你要生成的是对称且总和趋近于1的离散正态概率分布数组,NumPy里没有直接对应np.f(deviation, mean, n_elements)格式的现成函数,但可以通过几个基础函数组合快速实现:
第一步:生成等间距采样点,对应你需要的
n_elements个元素,围绕指定均值展开:import numpy as np mean = 0 deviation = 1 n_elements = 5 # 生成覆盖±2倍标准差范围的等间距点(可按需调整范围) x = np.linspace(mean - 2*deviation, mean + 2*deviation, n_elements)第二步:计算每个点的正态分布概率密度值,再归一化让总和接近1:
# 计算未归一化的正态密度 norm_unscaled = np.exp(-(x - mean)**2 / (2 * deviation**2)) # 归一化到总和为1 norm = norm_unscaled / norm_unscaled.sum() print(norm) # 输出近似值:[0.06136 0.24477 0.38774 0.24477 0.06136] print(np.sum(norm)) # 输出:1.0(或极接近1的浮点数)
如果配合SciPy(与NumPy配套的科学计算库)使用,可以用scipy.stats.norm.pdf简化密度计算:
from scipy.stats import norm norm_unscaled = norm.pdf(x, loc=mean, scale=deviation) norm = norm_unscaled / norm_unscaled.sum()
注意:采样点的范围(比如示例中的±2σ)会影响最终数组的分布形态,你可以调整linspace的起止值,让分布更集中或更分散。
内容的提问来源于stack exchange,提问作者Lex Podgorny
相关产品推荐
相关产品推荐

