【问题标题】:When using scipy.stats.multivariate_normal.pdf having the error:operands could not be broadcast together with shapes (1,8) (21,)使用 scipy.stats.multivariate_normal.pdf 时出现错误:操作数无法与形状一起广播 (1,8) (21,)
【发布时间】:2017-12-16 22:35:27
【问题描述】:

我想为我在 python 上的数据集计算多元高斯密度函数。我的数据集有 21 个变量和 75 个数据点。

我已经为此计算了协方差矩阵 (cov),它是一个 21*21 数组,平均数组 m,其形状为 (21,)。我需要使用这个 scipy 函数的另一个输入是“分位数(类数组),x 的最后一个轴表示组件”。

我不太明白分位数指的是什么。

我将函数的分位数输入写为 quantiles = np.array([0.0, 0.01, 0.05, 0.1, 1-0.10, 1-0.05, 1-0.01, 1.0]) 但我一直收到错误消息然后计算 scipy.stats.multivariate_normal.pdf(quantiles,m,cov)

错误是:valueError:operands could not be broadcast together with shapes (1,8) (21,)

有人可以帮忙吗?

【问题讨论】:

    标签: python pdf scipy gaussian quantile


    【解决方案1】:

    我认为该文档要求x 以一种相当难以理解的方式在其最后一个轴中包含实际的随机向量。以下代码有效:

    import numpy as np
    from scipy.stats import multivariate_normal
    
    
    mean = np.array([0.5, 0.1, 0.3])
    cov = np.array([[0.1, 0.0, 0.0], [0.0, 1.5, 0.0], [0.0, 0.0, 0.9]])
    x = np.random.uniform(size=(100, 3))
    y = multivariate_normal.pdf(x, mean=mean, cov=cov)
    print(y)
    

    因此,构建您的数据矩阵x,使其在第一维(每一行)中包含您的数据向量。第二个维度(列)将构成您的 21 个独立变量。所以基本上,您需要将数据插入到(75,21) 大小的矩阵中。请注意均值向量和协方差矩阵条目对应于正确的变量。

    【讨论】:

    • 感谢您陈述“不全面的方式”。仅仅通过阅读文档就没有什么意义!
    • 鉴于我有一些数据的均值和协方差。如果我想计算一个新点 x_0 属于同一数据的概率,我应该再次使用:y = multivariate_normal.pdf(x_0, mean=mean, cov=cov) 吗?
    猜你喜欢
    • 2019-09-01
    • 1970-01-01
    • 2020-05-22
    • 2022-09-24
    • 2015-05-18
    • 2018-02-28
    • 1970-01-01
    • 2017-09-09
    • 2020-09-06
    相关资源
    最近更新 更多