创建一个循环以将矩阵乘以它的每个元素,然后对结果求和的最佳方法
Best way to create a loop for multiplying a matrix by every one of its elements, then summing the results
对 Python 非常陌生,因此对于 vocabulary/knowledge 的缺失深表歉意。我想知道是否有更好的方法来实现下面的代码提供的功能。使用我所做的循环,我可以生成并追加矩阵 A 乘以 A 中的每个元素形成的所有 matrices/arrays。代码的最后一行然后对这个数组中的所有元素求和,打印出我想要的结果。
问题是,当我达到大约 d = 600 时,由于我的计算机内存不足,我收到 SIGKILL 错误。
我已经考虑了它背后的数学原理,其中包括将求和分解为处理不同索引值的部分,但似乎没有什么可以显着加快它的速度。
这可能纯粹是一个基于内存的问题,但我想我会询问是否有任何基于 Python/code 的提示可以提供帮助。代码如下:
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
对 Python 非常陌生,因此对于 vocabulary/knowledge 的缺失深表歉意。我想知道是否有更好的方法来实现下面的代码提供的功能。使用我所做的循环,我可以生成并追加矩阵 A 乘以 A 中的每个元素形成的所有 matrices/arrays。代码的最后一行然后对这个数组中的所有元素求和,打印出我想要的结果。
问题是,当我达到大约 d = 600 时,由于我的计算机内存不足,我收到 SIGKILL 错误。
我已经考虑了它背后的数学原理,其中包括将求和分解为处理不同索引值的部分,但似乎没有什么可以显着加快它的速度。
这可能纯粹是一个基于内存的问题,但我想我会询问是否有任何基于 Python/code 的提示可以提供帮助。代码如下:
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