如何使用Numpy计算矩阵所有元素的和?现有求和函数问题求助
搞定二维数组求和的Numpy实现问题
嘿,我看你自己写了个双重循环的check_sum函数来计算1024x1024二维数组的总和,但用Numpy的sum方法总是得不到正确结果,这大概率是对Numpy数组/矩阵的sum用法没摸透,咱们一步步来解决:
先确认你的原生函数是没问题的
你的循环函数逻辑完全正确,就是遍历所有元素累加,这点不用怀疑。但Numpy的向量化操作效率比循环高太多,尤其是1024x1024这种规模,必须得用对它的方法。
分两种场景给你正确的Numpy实现
场景1:你的grid是Numpy数组(numpy.ndarray)
这是最常用的情况,直接调用grid.sum()就能得到所有元素的总和,默认就是对整个数组的所有元素求和,和你的循环结果完全一致:
import numpy as np # 生成测试用的1024x1024数组 grid = np.random.rand(1024, 1024) total = grid.sum() print(total)
场景2:你的grid是Numpy矩阵(numpy.matrix)
如果你用的是numpy.matrix对象,要注意它的sum方法默认是按列求和(轴为0),直接调用grid.sum()会得到一个1x1024的矩阵,而不是单个总数值。这时候必须指定axis=None来求所有元素的总和:
import numpy as np grid = np.matrix(np.random.rand(1024, 1024)) total = grid.sum(axis=None) print(total)
或者你也可以先把矩阵转成普通数组再求和:np.asarray(grid).sum(),结果是一样的。
为什么你之前的结果不符?
大概率是这几个原因之一:
- 你给Numpy数组的
sum指定了轴(比如axis=0或axis=1),得到的是行/列的和,不是总合 - 用
numpy.matrix时没加axis=None,得到的是列和的矩阵,不是单个数值 - 测试时用的
grid在两种方法中不是同一个对象(比如一个是Python列表嵌套,一个是Numpy数组),导致数值不一致
替换你的check_sum函数的Numpy版本
如果要把你的函数改成Numpy实现,直接这样写就行,兼容列表嵌套和Numpy数组输入:
import numpy as np def check_sum(grid): # 如果输入是Python列表嵌套,先转成Numpy数组 if not isinstance(grid, np.ndarray): grid = np.array(grid) return grid.sum()
这个版本比你的循环快很多,尤其是处理大数组的时候。
内容的提问来源于stack exchange,提问作者Giskard Reventlov
相关产品推荐
相关产品推荐

