NumPy修改列值报错:无法将(108,1)数组广播到(108,)如何解决
错误原因
你遇到的报错是维度不匹配导致的:
你定义的Weight形状为(108, 796),取Weight[:,i]时得到的是长度为108的一维数组,形状为(108,);而你生成的tt是二维数组,形状为(108,1),多了一个长度为1的列维度,numpy的广播规则不支持直接将二维数组赋值给一维数组的位置,因此触发报错。
解决方法
你可以任选以下任意一种方案修改代码:
- 方案1:赋值时压缩
tt的冗余维度
使用np.squeeze()自动去掉tt中长度为1的维度,修改赋值代码为:Weight[:,i] = np.squeeze(tt) - 方案2:生成
tt时直接定义为一维数组
修改reshape的目标形状参数,去掉第二个维度的1即可:
该方案会直接修改tt的形状为一维,如果你后续逻辑还需要用到二维的tt,优先选方案1或3tt = np.reshape(AR[:,:,i].T,(AR_a*AR_b,),order='F') - 方案3:赋值时显式取
tt的第一列
直接提取二维tt的第一列得到一维数组,修改赋值代码为:Weight[:,i] = tt[:,0]
内容的提问来源于stack exchange,提问作者camlove
相关产品推荐
相关产品推荐

