使用np.c_构造三阶多项式特征时生成行向量而非列矩阵的问题求助
np.c_构造三阶多项式特征时生成行向量而非列矩阵的问题求助
嘿,我看你在用np.c_手动构造三阶多项式特征时遇到了和预期不符的问题,咱们来一步步理清楚原因和解决办法:
问题核心差异
你自己测试用的x是一维数组(形状(20,)),而实际导入的francis_guide_vane_pos是二维行向量(形状(1, 286996))——这就是导致np.c_行为不同的关键!
- 对一维数组,
np.c_会默认把它当作列向量来拼接,所以能得到(20, 3)的特征矩阵; - 但对二维行向量,
np.c_会直接按行方向横向拼接每个输入,结果就变成了(1, 3*286996)的超长行向量,这和你想要的结果完全相反。
解决方法:把行向量转为列向量
只需要先把你的原始数据转换成列向量(形状(286996, 1)),再用np.c_拼接就可以得到预期的特征矩阵了,这里有两种常用的方式:
方法1:用reshape(-1, 1)转换
# 先将原行向量转为列向量 fgv_pos_col = francis_guide_vane_pos.reshape(-1, 1) # 构造三阶多项式特征矩阵 francis_guide_vane_pos_engineered = np.c_[fgv_pos_col, fgv_pos_col**2, fgv_pos_col**3] # 验证形状,应该输出 (286996, 3) print(francis_guide_vane_pos_engineered.shape)
方法2:用[:, np.newaxis]添加新轴
# 通过索引添加列维度,转为列向量 fgv_pos_col = francis_guide_vane_pos[:, np.newaxis] # 构造特征矩阵 francis_guide_vane_pos_engineered = np.c_[fgv_pos_col, fgv_pos_col**2, fgv_pos_col**3]
验证效果
转换后每个输入都是(286996, 1)的二维列向量,np.c_会按列方向拼接,最终就能得到你想要的n行3列的特征矩阵啦,和你测试用的X结构完全一致~
备注:内容来源于stack exchange,提问作者felix_the_cat
相关产品推荐
相关产品推荐

