首页 > 解决方案 > matplotlib plot 会导致 sklearn 的 PCA.fit_transform 函数失败吗?

问题描述

在代码片段一中,如果我在 Pycharm 控制台中将它作为一个完整的代码块运行一次,它将完全运行并成功打印 PCA 输出两次。

from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt
x = [1, 2 , 3, 4, 5, 6, 7, 8, 9]
y = [3, 4, 5, 6, 7, 8, 9, 10, 11]
xy = np.array([x, y]).T
xy_pca = PCA(n_components=1).fit_transform(xy)
print(xy_pca)
ax = plt.figure().add_subplot(111)
xy_pca_2 = PCA(n_components=1).fit_transform(xy)
print(xy_pca_2)

但是,如果我再次运行完整的代码块,我会得到“nan's”作为第一个 print 语句的输出,但第二个 print 语句的输出是正确的。此外,如果我重新开始并使用 python 控制台逐行运行该代码块,我会在第一个 print 语句中得到正确的输出,但从第二个 print 语句中得到“nan's”。

这让我相信 matplotlib 功能会以某种方式干扰成功运行 sklearn 的 PCA.fit_transform 函数所需的状态。或者控制台状态发生了一些奇怪的事情。

但这不是故事的结局。使用下面的第二个代码块,无论是作为一个完整的块运行还是从 Python 控制台逐行运行,它都不会失败。唯一的区别是 x 和 y 数组各短一个。这不应该影响 matplotlib 或 sklearn 功能,但不知何故它会有所作为。

from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt
x = [1, 2 , 3, 4, 5, 6, 7, 8]
y = [3, 4, 5, 6, 7, 8, 9, 10]
xy = np.array([x, y]).T
xy_pca = PCA(n_components=1).fit_transform(xy)
print(xy_pca)
ax = plt.figure().add_subplot(111)
plt.show()
xy_pca_2 = PCA(n_components=1).fit_transform(xy)
print(xy_pca_2)

系统配置:

标签: pythonmatplotlibscikit-learnpycharm

解决方案


推荐阅读