使numpy.sum()返回矩阵之和而不是单个数字

Jes*_*vve 5 python arrays numpy sum matrix

我正在使用带有numpy的矩阵进行相当复杂的求和.矩阵matrix.shape = (500, 500)的形状是和阵列的形状arr.shape = (25,).操作如下:

totalsum = np.sum([i * matrix for i in arr])
Run Code Online (Sandbox Code Playgroud)

这是我不明白的:

np.sum()很慢并返回一个浮点数float64.用Python做同样的操作sum.(),即

totalsum2 = sum([i*matrix for i in arr])
Run Code Online (Sandbox Code Playgroud)

保留矩阵的形状.也就是说,产生的形状是totalsum2.shape() = (500, 500).咦?

我也觉得奇怪的是np.sum()需要更长的时间sum(),特别是当我们使用numpy ndarrays时.

到底发生了什么?如何np.sum()比较上述值sum()

我想np.sum()保留矩阵形状.如何设置尺寸以np.sum()保留矩阵尺寸并且不返回单个浮动?

Yoa*_*ann 6

必须调用np.sum,并将可选的axis参数设置为0(在0轴上求和,即由列表推导创建的值)

totalsum = np.sum([i * matrix for i in arr], 0)
Run Code Online (Sandbox Code Playgroud)

或者,您可以省略括号,以便np.sum评估生成器.

totalsum = np.sum(i * matrix for i in arr)
Run Code Online (Sandbox Code Playgroud)


Tom*_*Tom 5

Python的常规sum()任务是获取该列表中的每个项目并将它们一起添加.将相同大小的数组添加到一起时,只需按元素添加它们即可.例如:

test1 = np.array([[4,3],[2,1]])
test2 = np.array([[8,9],[1,1]])
print test1 + test2
Run Code Online (Sandbox Code Playgroud)

返回

[[12,12]
[3,2]]
Run Code Online (Sandbox Code Playgroud)

而使用np.sum,您将沿轴或轴添加.如果你想维护数组中的东西,并且想要使用np.sum,你需要将你的操作(在数组中乘以i)投影到第三维,然后使用np.sum(axis = 2) .

这可以使用:

np.sum(matrix[:,:,np.newaxis] * array[np.newaxis,np.newaxis,:],axis=2) 
Run Code Online (Sandbox Code Playgroud)