调用 scipy.stats.multivariate_normal 后,pylab.plot“无法将浮点 NaN 转换为整数”

Posted

技术标签:

【中文标题】调用 scipy.stats.multivariate_normal 后,pylab.plot“无法将浮点 NaN 转换为整数”【英文标题】:pylab.plot "cannot convert float NaN to integer" after calling scipy.stats.multivariate_normal 【发布时间】:2014-05-27 19:07:39 【问题描述】:

在测试回归算法时,我发现了这种奇怪的行为:对于某些协方差矩阵,multivariate_normal 函数给出了正确的样本,但随后(仅)在第一次调用 pylab.plot() 时引发了异常:

ValueError: 无法将浮点 NaN 转换为整数

以下代码重现了错误:

import numpy as np
from scipy.stats import multivariate_normal as mnorm
from matplotlib import pyplot as plt

B = np.array([ 0, 0, 0])

# works fine
v1 = np.array([[1, 0, 0],
              [0, 1, 0],
              [0, 0, 1]])


# OK. non positive semidefinite, well raised exception
v2 = np.array([[ 0.2 , -0.2, -0.3],
              [-0.2,  0.4, -0.9],
              [-0.3, -0.9,  0.7]])

# KO. exception (?)
v3 = np.array([[ 0.2 , -0.02, -0.026],
              [-0.02,  0.014, -0.009],
              [-0.026, -0.009,  0.017]])



w = mnorm(mean=B, cov=v3).rvs()
print w

plt.plot(w)
plt.show()

如果 plt.plot(w) 被第二次调用,那么它就可以工作。有什么想法吗?

版本:

python 2.7.5 Anaconda 1.9.1(64 位)

scipy 0.14.0

matplotlib 1.3.1

numpy 1.8.1

【问题讨论】:

【参考方案1】:

嗯,它在这里工作得很好,并说:

[-0.72849048  0.15439657  0.00146853]

并显示:

我使用 python 2.7.6

其他包和你的一样。

希望它有所帮助。祝你好运!

【讨论】:

谢谢@Louis。那很奇怪,那么它可能是我的机器。我会检查其他机器/操作系统。

以上是关于调用 scipy.stats.multivariate_normal 后,pylab.plot“无法将浮点 NaN 转换为整数”的主要内容,如果未能解决你的问题,请参考以下文章

java三种调用方式(同步调用/回调/异步调用)

LINUX系统调用

引用调用 vs 复制调用调用

RPC 调用和 HTTP 调用的区别

js方法调用

深入理解Java虚拟机——方法调用(解析调用)