numpy覆写zeros数组列时报错(8,1)数组无法广播到(8,)如何解决
问题原因
你贴出的示例代码中x0是普通Python列表,直接运行不会触发该报错。实际出现报错的核心原因是你运行代码时使用的x0已经被处理为形状为(8,1)的二维numpy数组:
- 赋值目标
xx[:,0]是一维数组,形状为(8,),仅包含1个维度 - 待赋值的
x0是二维数组,多了1个长度为1的冗余维度,二者形状不匹配,numpy的广播规则不支持自动压缩维度,因此抛出广播错误
解决方法
将x0的冗余维度去掉转为一维数组后再赋值即可,可选以下任意一种方法:
- 使用
ravel()方法展平数组
xx[:, 0] = x0.ravel()
- 使用
flatten()方法降维
xx[:, 0] = x0.flatten()
- 通过索引直接取第二维的第一个元素去掉冗余维度
xx[:, 0] = x0[:, 0]
- 使用
squeeze()方法自动删除所有长度为1的维度
xx[:, 0] = x0.squeeze()
内容的提问来源于stack exchange,提问作者D_S
相关产品推荐
相关产品推荐

