线性回归绘图:plt.plot报错原因及squeeze()作用解析
plt.plot()触发InvalidIndexError与squeeze()的作用解析
报错原因
plt.scatter()对输入维度兼容性极高:它会自动将多维输入扁平化处理成一维序列,所以哪怕你传入的x/y是(n_samples, 1)这类二维列向量,也能正常绘制散点。plt.plot()对输入维度要求更严格:它默认期望输入是一维序列(或维度匹配的多维数组用于绘制多条线)。如果传入(n_samples, 1)的二维数组,它会误将其识别为n_samples组、每组1个数据点的集合,而非单条直线的点序列。这种维度误解会导致内部索引访问逻辑出错,最终触发InvalidIndexError。
squeeze()的核心作用
squeeze()是numpy和pandas通用的方法,核心功能是移除数据中所有长度为1的冗余维度:- 若原数据是
(100, 1)的二维列向量,调用后会转为(100,)的一维数组; - 若原数据是
(1, 100)的二维行向量,调用后也会转为(100,)的一维数组; - 如果原数据本身没有长度为1的维度,
squeeze()会直接返回原对象——这就是你看到调用后shape无变化的原因,说明你的数据可能存在一个容易被忽略的长度为1的维度(比如pandas的单列DataFrame,shape为(n,1),调用squeeze()后转为Series,shape变为(n,),若你没仔细对比两种对象的shape就会误以为无变化)。
- 若原数据是
- 在你的案例中,
squeeze()把带冗余维度的输入转成了plt.plot()所需的一维序列,消除了维度不匹配问题,因此绘图恢复正常。
内容的提问来源于stack exchange,提问作者Melvin Lee
相关产品推荐
相关产品推荐

