Pandas的iloc为何返回不同维度向量?致梯度下降算法运行异常
问题原因及解决办法
- 两种写法的核心差异是返回的数据结构维度不同:
data2.iloc[:,-1]:用单索引选取最后一列,返回的是一维Series对象,转为numpy数组后是(47,)的一维数组,若被误处理成行向量就会显示(1,47)。data2.iloc[:, cols2-1:cols2]:用切片语法选取单列(即使是单个列的切片),返回的是二维DataFrame对象,转为numpy数组后是(47,1)的二维列向量。
- 梯度下降算法依赖严格的矩阵维度匹配,通常要求标签
y是(m,1)的列向量(m为样本数)。如果y是一维数组或行向量,在计算误差、参数更新等矩阵运算时会出现维度不兼容,导致算法无法正常运行。 - 快速解决方法:
- 若想用第一种写法获取列向量,可追加维度转换:
y2 = data2.iloc[:,-1].to_numpy().reshape(-1,1) - 直接使用切片写法确保返回二维结构,避免维度问题。
- 若想用第一种写法获取列向量,可追加维度转换:
内容的提问来源于stack exchange,提问作者li Lu
相关产品推荐
相关产品推荐

