答案 0 :(得分:1)
首先,您需要知道为什么循环(i,k,j)
比C上的(i,j,k)
快。之所以这样,是因为内存使用优化是在计算机内存中以线性方式分配矩阵,因此,如果您使用(i,k,j)
进行迭代,则会对每个循环都占用一块内存并将其加载到RAM有利。如果您使用(i,j,k)
,则要对其进行处理,并且每一步都会占用RAM内存块,而由于迭代迭代块而在下一步中将其丢弃。
numpy
的实现会为您处理,因此即使您使用最差的顺序numpy
也可以使它运行得更快。
丢弃缓存并一直更改缓存的事件称为Cache miss
在this link,您可以看到有关如何分配内存以及为什么以某种特定方式更快地解释内存的更好的解释。