如何在10×10 NumPy数组上实现以(3,5)为中心的二维高斯分布
实现以(3,5)为中心的10×10二维高斯分布特征
下面是直接可行的Python实现方案,解决你使用scipy.stats.multivariate_normal.pdf时可能踩的坐标或参数设置问题:
完整代码示例
import numpy as np from scipy.stats import multivariate_normal import matplotlib.pyplot as plt # 1. 生成10×10的网格坐标(数组坐标为(row, col)即(y, x)顺序) rows = np.arange(10) cols = np.arange(10) y, x = np.meshgrid(rows, cols, indexing='ij') # 用indexing='ij'保证输出维度和数组行列对应 # 2. 定义高斯分布核心参数 mean = [3, 5] # 对应数组的(行, 列)坐标 # 协方差矩阵:对角线值越小,分布越集中;可根据需求调整 covariance = [[1, 0], [0, 1]] # 3. 计算每个坐标点的高斯概率密度 pos = np.dstack((y, x)) gaussian_feature = multivariate_normal.pdf(pos, mean=mean, cov=covariance) # 此时gaussian_feature就是10×10的特征数组 print(gaussian_feature.shape) # 输出 (10, 10) # 4. 热力图验证结果 plt.figure(figsize=(6,5)) plt.imshow(gaussian_feature, cmap='viridis', origin='lower') plt.scatter(5, 3, c='red', marker='x', s=100, label='中心(3,5)') # scatter的坐标是(列, 行) plt.colorbar(label='概率密度') plt.legend() plt.xlabel('列坐标') plt.ylabel('行坐标') plt.title('10×10二维高斯分布热力图') plt.show()
关键注意事项
- 坐标匹配:数组的(row, col)对应高斯分布的(y, x),
indexing='ij'确保网格维度和数组行列完全对齐;绘制散点时要把列坐标放在前、行坐标放在后。 - 分布调整:如果需要更宽/窄的高斯分布,直接修改协方差矩阵的对角线数值——数值越大,分布越分散;非对角线值控制斜向分布,不需要斜向时保持0即可。
- 输入格式:
np.dstack自动把二维坐标网格合并成multivariate_normal.pdf需要的三维输入格式,无需手动展平再重塑,直接得到目标维度的特征数组。
内容的提问来源于stack exchange,提问作者2023_resolution
相关产品推荐
相关产品推荐

