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()保留矩阵尺寸并且不返回单个浮动?
必须调用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)
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)