使用scipy.stats.multivariate_normal.pdf时出现错误:无法将形状为(1,8)的操作数与形状为(21,)的操作数进行广播。

9
我想在Python中计算多元高斯密度函数,用于我拥有的数据集。我的数据集有21个变量和75个数据点。
我已经计算了这个数据集的协方差矩阵(cov),它是一个21×21的数组,以及平均值数组m,其形状为(21,)。使用这个scipy函数时,我需要另外一个输入"Quantiles(array-like),其中x的最后一个轴表示组件"。
我不太理解"quantiles"是什么意思。
我将函数的quantiles参数编写为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,)
请问有人可以帮忙解决吗?
1个回答

15

我认为这份文件要求一个包含实际随机向量的最后一轴的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)大小的矩阵中。请注意,均值向量和协方差矩阵条目应对应于正确的变量。


感谢您提出“不够详细”的问题。仅通过阅读文档,很难理解其中的意义! - Mong H. Ng
假设我已经有了一些数据的均值和协方差。如果我想计算一个新点x_0属于相同数据的概率,我应该再次使用y = multivariate_normal.pdf(x_0, mean=mean, cov=cov)吗? - seralouk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接