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

时间:2019-02-22 13:48:42

标签: python c numpy matrix

在c中,有一个重要的内存利用示例:使用3 for循环(i,j,k)的朴素矩阵乘法。可以证明,由于内存合并,使用(i,k,j)的速度比(i,j,k)快得多。在python numpy中,索引的顺序(同样是朴素的3个循环,不是np.dot)无关紧要。为什么会这样?

1 个答案:

答案 0 :(得分:1)

首先,您需要知道为什么循环(i,k,j)比C上的(i,j,k)快。之所以这样,是因为内存使用优化是在计算机内存中以线性方式分配矩阵,因此,如果您使用(i,k,j)进行迭代,则会对每个循环都占用一块内存并将其加载到RAM有利。如果您使用(i,j,k),则要对其进行处理,并且每一步都会占用RAM内存块,而由于迭代迭代块而在下一步中将其丢弃。

numpy的实现会为您处理,因此即使您使用最差的顺序numpy也可以使它运行得更快。

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

this link,您可以看到有关如何分配内存以及为什么以某种特定方式更快地解释内存的更好的解释。