web-dev-qa-db-ja.com

エラーがあるscipy.stats.multivariate_normal.pdfを使用する場合:オペランドをシェイプと一緒にブロードキャストできませんでした(1,8)(21、)

Pythonにあるデータセットの多変量ガウス密度関数を計算したいと思います。私のデータセットには21の変数があり、75のデータポイントがあります。

21 * 21配列であるこれの共分散行列(cov)と、形状(21、)を持つ平均配列mを計算しました。この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:オペランドをシェイプと一緒にブロードキャストできませんでした(1,8)(21、)

誰か助けてもらえますか?

6
jan93

このドキュメントは、最後の軸に実際のランダムベクトルをかなり理解できない方法で含む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を作成して、最初の次元(各行)にデータベクトルが含まれるようにします。 2番目の次元(列)は、21の個別の変数を構成します。したがって、基本的には、データを(75,21)サイズのマトリックスに挿入する必要があります。平均ベクトルと共分散行列のエントリが正しい変数に対応していることに注意してください。

11
Ufuk Can Bicici