Python 两种不同跨距阵列上的内部numpy循环顺序

Python 两种不同跨距阵列上的内部numpy循环顺序,python,numpy,cpu-cache,Python,Numpy,Cpu Cache,考虑以下代码: import numpy as np A = np.arange(100 * 100 * 100) A.shape = (100, 100, 100) B = A.copy() B[:] = A.transpose(2, 0, 1) 在内部,是否定义了最后一个副本的循环顺序?numpy是否优先考虑B 的自然顺序还是A?如果我将最后一行更改为B[:]+=A.transpose(2,0,1),顺序是否不同 上下文:我对复制阵列时缓存未命中的影响很感兴趣,希望使用简单的numpy脚本

考虑以下代码:

import numpy as np
A = np.arange(100 * 100 * 100)
A.shape = (100, 100, 100)
B = A.copy()
B[:] = A.transpose(2, 0, 1)
在内部,是否定义了最后一个副本的循环顺序?numpy是否优先考虑
B
的自然顺序还是
A
?如果我将最后一行更改为
B[:]+=A.transpose(2,0,1)
,顺序是否不同


上下文:我对复制阵列时缓存未命中的影响很感兴趣,希望使用简单的numpy脚本来衡量成本。然而,要解释numpy结果,我需要知道它在内部做什么。

你的意思是
A。转置(2,0,1)
nditer
是在数组上迭代的首选方式(尽管我不知道是否每个操作都已转换)。解释它,并包括一个
cython
示例。循环顺序是什么?据我所知,转置只改变刺耳的声音,斯努皮肯定至少比这聪明一点。例如,它肯定会以相反的顺序在“C”有序和“F”有序阵列轴上循环。我还认为它会执行一系列操作,比如
B=a.copy();B.T[:]=A.T
以最有效的方式。