質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

4回答

4758閲覧

Pythonで RuntimeWarning: divide by zero encountered in log -infのエラー

gymgym

総合スコア97

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/05/16 07:59

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が入っているというエラーではなかったらどのようなことが原因でしょうか

よろしくお願い致します

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

前以て行列の階数を調べておけばいいんじゃないでしょうか。

投稿2018/05/16 08:07

LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

... この部分でlogに0が入っているみたい ...

まずは、
print(W)
orint(det(W))
を追加して、値を確認してもみるとよいです。

W の内容が正しいものだとしたら、 det(W) が 0 のときは、 log をしないようにコードを修正すればよいです。
W のないようが想定しているものでなければ、W を計算してい部分をもなおしていく...
というように、確認・修正を繰返してみてください。

投稿2018/05/16 22:23

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

上記のコードではwishartがコールさていませんが、関係ないものということでしょうか?

投稿2018/05/16 09:25

編集2018/05/16 09:28
mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tachikoma

2018/05/16 09:37

あら、ホントだ。
gymgym

2018/05/17 00:56

申し訳ございません。抜けてました。
guest

0

ベストアンサー

det(W)が0になっているということですね。det(W)の結果が浮動小数点になると思うのでちょっと危なっかしいですが、if det(W) == 0:で捕まえられんじゃないでしょうか。

投稿2018/05/16 08:07

編集2018/05/16 08:08
tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問