Pythonを用いてウィシャート分布を得たいと考えています
Python
1import pandas as pd 2import numpy as np 3import os 4import math 5import matplotlib.pyplot as plt 6from scipy import arange, float64 7from scipy.linalg import det 8from scipy.special import digamma 9 10def wishart(D, v_k, W): 11 arr = float64(v_k + 1 - arange(1,D)) / 2 12 return digamma(arr).sum() + D * np.log(2)+ np.log(det(W)) 13 14N=29 15# 平均ベクトル 16row_sum = np.sum(data, axis=0) 17x_ave = row_sum/N 18 19#分散 20S = np.cov(data, rowvar=1, bias=1) 21 22b0 = 0.1 23m0 = 0 24α = 0.1 25W = np.eye(500)*α 26v0 = 500 27 28a1 = x_ave - m0 29a2 = a1.T 30b_k = b0 + N 31m_k = 1/b_k*(b0*m0 + N*x_ave) 32Wk_inverse = np.linalg.inv(W) + N*S + (b0*N/b0+N)* np.dot(a1,a2) 33
以上のコードで
RuntimeWarning: divide by zero encountered in log -infのエラー
このようなエラーがでます
np.log(det(W))
この部分でlogに0が入っているみたいなのですが、0が入っているか確かめる方法はありますか。
また、0が入っているというエラーではなかったらどのようなことが原因でしょうか
よろしくお願い致します
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。