Python矩阵乘法索引交换内存使用

2024-04-20 08:48:59 发布

您现在位置:Python中文网/ 问答频道 /正文

在c语言中,有一个例子说明了内存利用的重要性:使用3个for循环(i,j,k)的朴素矩阵乘法。可以证明,由于内存合并,使用(i,k,j)比使用(i,j,k)快得多。在pythonnumpy中,if索引的顺序(同样是naive3循环,而不是np.dot)并不重要。为什么


Tags: 内存证明语言利用forif顺序np
1条回答
网友
1楼 · 发布于 2024-04-20 08:48:59

首先,您需要知道为什么循环(i,k,j)比C上的(i,j,k)快。这是因为内存使用优化,在您的计算机内存中,矩阵是以线性方式分配的,因此如果您使用(i,k,j)进行迭代,那么您使用的是对您有利的方法,即每个循环占用一块内存并加载到RAM中。如果您使用(i,j,k),您就是在使用它,并且每一步都会向您的RAM加载一个内存块,并在下一步放弃,因为您是在迭代跳转块

numpy的实现为您处理它,因此即使您使用最坏的顺序,numpy也会命令它更快地工作

丢弃缓存并一直更改它的事件称为Cache miss

this link您可以看到一个更好的解释,关于内存是如何分配的,以及为什么它在某些特定的i部分中更快

相关问题 更多 >