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

0 投票
1 回答
1459 浏览
提问于 2025-04-18 07:44

在测试一个回归算法的时候,我发现了一个奇怪的现象:对于某些协方差矩阵,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

嗯,这里运行得很好,显示的是:

[-0.72849048  0.15439657  0.00146853]

并且显示了:

在这里输入图片描述

我使用的是 Python 2.7.6

其他的包和你的一样。

希望这对你有帮助。祝好运!

撰写回答