Прежде всего вам нужно знать, почему цикл (i,k,j)
быстрее, чем (i,j,k)
на C. Это происходит потому, что при оптимизации использования памяти в памяти вашего компьютера матрица распределяется линейным образом, поэтому, если вы выполняете итерациюиспользуя (i,k,j)
, вы используете это в свою пользу, где каждый цикл занимает блок памяти и загружается в вашу оперативную память.Если вы используете (i,j,k)
, вы работаете против него, и каждый шаг будет загружать блок памяти в вашу ОЗУ и сбрасывать на следующем шаге, потому что вы перебираете блоки перехода.
Реализация дескриптора numpy
это для вас, так что даже если вы используете наихудший порядок, numpy
заставит его работать быстрее.
Событие выброса кеша и постоянного его изменения называется Cache miss
На по этой ссылке вы можете увидеть гораздо лучшее объяснение о том, как распределяется память и почему она работает быстрее каким-то конкретным способом.