1. 程式人生 > >Python中陣列按行儲存,與Matlab不同

Python中陣列按行儲存,與Matlab不同

陣列因為是線性結構,因此在記憶體中都是順序儲存的,但按行儲存還是按列儲存,不同語言有不同的規定。matlab是按列儲存的,而C/C++和python是按行儲存的 。

以二維陣列為例:

#python
import numpy as np
>>> A=np.array([[1,2,3],[4,5,6]])
array([[1, 2, 3],
       [4, 5, 6]])

其在記憶體中的儲存順序為
這裡寫圖片描述

因此reshape之後的結果如下

#python
>>> A.reshape(3,2)
array([[1, 2],
       [3, 4
], [5, 6]])

而相同的陣列A在matlab平臺下的儲存順序為
這裡寫圖片描述

因此在matlab下reshape之後的結果如下

%matlab
>> A=[1,2,3;4,5,6]
A =
     1     2     3
     4     5     6
>> reshape(A,3,2)
ans =
     1     5
     4     3
     2     6

另外,matlab下可以直接根據儲存順序讀取陣列資料,也可以看出matlab是按列儲存的

注:matlab中陣列初始索引為1,因為兩者語法上的一些差異,程式碼有所不同,已通過註釋標註

%matlab
>> A =
     1     2     3
     4     5     6
>> A(2)
ans =
     4
>> A(5)
ans =
     3

不過python中不能像上面的方法使用

#python
>>> A=np.array([[1,2,3],[4,5,6]])
array([[1, 2, 3],
       [4, 5, 6]])
>>> A[1]
array([4, 5, 6])
>>> A[2]
IndexError: index 2
is out of bounds for axis 0 with size 2 >>> A[1,0] 4

瞭解陣列在記憶體中的儲存順序能幫助我們更好的處理陣列。