转置数组并实际重新排序内存

bdf*_*bes 14 memory transpose numpy

我有一个3-D NumPy数组,例如

a = np.random.random((2,3,5))
Run Code Online (Sandbox Code Playgroud)

我想转置最后两个轴,即

b = a.transpose(0,2,1)
Run Code Online (Sandbox Code Playgroud)

但是,我不希望看到一个蹒跚的步伐!我想实际复制数组并在内存中重新排序.实现这一目标的最佳方法是什么?

War*_*ser 17

copy()默认情况下,该方法将重新排序为C-contiguous顺序:

b = a.transpose(0,2,1).copy()
Run Code Online (Sandbox Code Playgroud)


Iza*_*ana 5

在幕后,b 的步幅与 a 不同。

更喜欢使用ascontigiousarray,它会在需要时复制内存。而copy总是会复制内存。