python - 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)
系统配置:
Python 3.7.8
PyCharm 2020.2(社区版)Build #PC-202.6397.98,于 2020 年 7 月 28 日构建 运行时版本 11.0.7+10-b944.20 amd64 VM OpenJDK 64-Bit Server VM by JetBrains sro Windows 10 10.0 GC ParNew,ConcurrentMarkSweep Memory 2014M 核心 4
matplotlib 3.3.1
sklearn 0.23.2
解决方案
推荐阅读
- oauth-2.0 - Fitbit授权后如何识别应用程序用户
- angularjs - 锚标记跳转功能不适用于使用 TinyMCE 的动态内容
- sql - 使用多个条件在 MS Access 中添加数据行
- racket - raco: 如果已经存在,如何安装或更新它?
- firebase - 用户公司,Firestore 中的模型
- apache-spark - Spark包标志vs jars目录?
- javascript - 1970 年 1 月 1 日之前的 javascript 正则表达式日期
- php - 使用 Autodesk Forge 从 IFC 文件获取几何数据(尺寸)
- python - 清理 LexisNexis txt 文件,ZeroDivisionError
- r - 使用列中的变量在 ggplot 中绘制折线图