Python 创建循环的最佳方法是将矩阵与其每个元素相乘,然后对结果求和

Python 创建循环的最佳方法是将矩阵与其每个元素相乘,然后对结果求和,python,performance,coding-efficiency,Python,Performance,Coding Efficiency,对Python来说非常陌生,因此对于缺乏词汇/知识表示歉意。我想知道是否有更好的方法来实现下面的代码提供的功能。使用我所做的循环,我可以生成并附加所有矩阵/数组,这些矩阵/数组是由矩阵A乘以A中的每个元素形成的。最后一行代码然后对数组数组中的所有元素求和,并打印出我想要的结果 问题是,当我达到大约d=600时,由于我的计算机内存不足,我得到了SIGKILL错误 我考虑过它背后的数学原理,其中包括将总和分解成不同的部分,处理不同的指数值,但似乎没有什么能显著加快它的速度 这可能纯粹是一个基于内存的

对Python来说非常陌生,因此对于缺乏词汇/知识表示歉意。我想知道是否有更好的方法来实现下面的代码提供的功能。使用我所做的循环,我可以生成并附加所有矩阵/数组,这些矩阵/数组是由矩阵A乘以A中的每个元素形成的。最后一行代码然后对数组数组中的所有元素求和,并打印出我想要的结果

问题是,当我达到大约d=600时,由于我的计算机内存不足,我得到了SIGKILL错误

我考虑过它背后的数学原理,其中包括将总和分解成不同的部分,处理不同的指数值,但似乎没有什么能显著加快它的速度

这可能纯粹是一个基于内存的问题,但我想如果有任何基于Python/代码的提示可以帮助的话,我会问。代码如下:

A = numpy.random.randint(0, 4, size=(d, d))

All = []
for n in range(0, d):
    for m in range(0, d):
        All.append(A*(A[n,m]))

print(numpy.sum(All))

总的来说,我得到了正确的结果,但是由于矩阵的大尺寸和乘法的数量,我不能在没有内存错误的情况下得到我想要的d=2000。提前感谢。

如果您想要的是总金额,则无需在此循环并构建新列表。。。从数学上讲,你所做的可以归结为:

total = A.sum() ** 2

哇,说我把事情搞得太复杂了。非常感谢乔恩,当然这正是我想要的。