为何无法用np.hstack将一维numpy数组作为列拼接到二维数组
为什么
np.hstack无法将一维数组y添加到二维数组X中? 这个问题我之前也踩过坑,核心原因是数组维度不匹配!
先看你的数组形状:
X.shape是(50000, 784):这是一个二维数组,有50000行、784列y.shape是(50000,):这是一个一维数组,只有一个维度,既不是行向量也不是列向量
np.hstack(水平拼接)的要求是:所有待拼接的数组,除了拼接轴(默认是第1轴,也就是列方向)之外,其他维度的形状必须完全一致。但你的一维数组y和二维数组X的维度数量都不一样,hstack没办法识别怎么把一个一维数组“贴”到二维数组的列方向上,自然就会报错。
解决办法有这几种,随便挑一种都能用:
把y转换成二维列向量后再用hstack
用reshape给y增加一个列维度,让它的形状变成(50000, 1),这样就和X的行数匹配了:X_y = np.hstack([X, y.reshape(-1, 1)])这里
-1表示让numpy自动计算这个维度的大小,不用手动写50000。直接用
np.column_stack
这个函数专门用来拼接成列,它会自动把一维数组转换成二维列向量,非常省心:X_y = np.column_stack([X, y])用
np.concatenate指定拼接轴
同样需要先把y变成二维列向量,然后指定在轴1(列方向)拼接:X_y = np.concatenate([X, y[:, np.newaxis]], axis=1)y[:, np.newaxis]和reshape(-1,1)效果一样,都是给y加一个列维度。
试完上面任意一种方法,你就能得到形状为(50000, 785)的X_y数组啦!
内容的提问来源于stack exchange,提问作者Wizard
相关产品推荐
相关产品推荐

