MATLAB/Octave确实可以根据需要显示矩阵。第一个轴变化最快,最后一个轴变化最慢。在
numpy按另一顺序在轴上迭代。最后一个轴变化最快。在
从连续的数字组成一个数组可能有助于直观地看到差异:>> x = 1:24;
>> x=reshape(x,2,3,4)
x =
ans(:,:,1) =
1 3 5
2 4 6
ans(:,:,2) =
7 9 11
8 10 12
ans(:,:,3) =
13 15 17
14 16 18
ans(:,:,4) =
19 21 23
20 22 24
In [82]: x = np.arange(1,25).reshape(2,3,4)
In [83]: x
Out[83]:
array([[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]],
[[13, 14, 15, 16],
[17, 18, 19, 20],
[21, 22, 23, 24]]])
所以在MATLAB中,顺序是(行,列,平面),迭代和显示都是。numpy是(平面、行、列)。在
在numpy中,还有另一个变量,order:
^{pr2}$
但是打印还是从左到右。在In [115]: for i in range(4): print(x[:,:,i])
[[1 3 5]
[2 4 6]]
[[ 7 9 11]
[ 8 10 12]]
[[13 15 17]
[14 16 18]]
[[19 21 23]
[20 22 24]]
另一种可视化排序的方法是查看stridesIn [119]: x = np.arange(1,25).reshape(2,3,4)
In [120]: x.strides
Out[120]: (48, 16, 4)
要从一列到下一列,它将移动4个字节。但是从一个平面到下一个平面是48字节(4*3*4)的跨距。在
在order F中,步幅按另一顺序递增。在In [121]: np.arange(1,25).reshape(2,3,4,order='F').strides
Out[121]: (4, 8, 24)
我在np.set_printoptions中看不到任何能让我们控制轴顺序的东西。我不知道这个印刷的定义。在