for循环内填充空numpy数组,二维数组逐行求和存储失败如何解决
问题原因分析
- 形状定义错误:你声明的
(100,0)数组第二个维度长度为0,根本无法存储100个行求和的结果,你实际需要的是形状为(100,)的一维数组,或者(100,1)的二维数组。 - 实现逻辑错误:你的代码中每次
np.append的结果赋值给了新变量array,并没有修改原x_new,循环结束后x_new还是初始的空数组。同时循环调用np.append会每次重新生成完整数组,性能开销极大。
最优解决方案
numpy原生支持按指定维度求和,不需要手写循环,一行代码即可完成需求:
# 得到形状为(100,)的一维结果数组,每个元素对应X一行的和 x_new = X.sum(axis=1)
如果你确实需要二维格式的结果(形状为(100,1)),可以添加keepdims参数:
x_new = X.sum(axis=1, keepdims=True)
原循环写法的修正方案(仅做参考,不推荐生产环境使用)
如果你一定要用循环实现,推荐直接初始化固定长度的数组再赋值,避免反复append:
x_new = np.empty(100) for i in range(len(X)): x_new[i] = X[i].sum()
内容的提问来源于stack exchange,提问作者CostasMal
相关产品推荐
相关产品推荐

