Numpy中reshape的使用方法為:numpy.reshape(a, newshape, order='C')
a
: type:array_like(偽數組,可以看成是對數組的擴展,但是不影響原始數組。)(事實證明可以省略不寫,但此時reshape方法前是要處理的數組)newshape
:新的格式——整數或整數數組,如(2,3)表示2行3列。新的形狀應該與原來的形狀兼容,即行數和列數相乘後等於a中元素的數量。如果是整數,則結果將是長度的一維數組,所以這個整數必須等於a中元素數量。若這裡是一個整數數組,那麼其中一個數據可以為-1,在這種情況下,這個值python會自動從根據第二個數值和剩余維度推斷出來。order
: 可選范圍為{‘C’, ‘F’, ‘A’}。使用索引順序讀取a的元素,並按照索引順序將元素放到變換後的的數組中。如果不進行order參數的設置,默認參數為C。(1)“C” 指的是用類C寫的讀/索引順序的元素,最後一個維度變化最快,第一個維度變化最慢。以二維數組為例,簡單來講就是橫著讀,橫著寫,優先讀/寫一行。
(2)“F” 是指用FORTRAN類索引順序讀/寫元素,最後一個維度變化最慢,第一個維度變化最快。豎著讀,豎著寫,優先讀/寫一列。注意,“C”和“F”選項不考慮底層數組的內存布局,只引用索引的順序。
(3)“A” 選項所生成的數組的效果與原數組a的數據存儲方式有關,如果數據是按照FORTRAN存儲的話,它的生成效果與”F“相同(列優先),否則與“C”相同(行優先)。這裡可能聽起來有點模糊,下面會給出示例。
注:
FORTRAN
和C
是兩個語言,他們存儲數組的方式不同,FORTRSAN為列有限,而C為行優先。在python中默認數組生成的時候是按照C的方式進行存儲。但,很多時候我們需要調用Fortran的一些庫進行數學計算,所以需要讓numpy生成的數組變成按照FORTRAN的方式存儲,使用numpy.asfortranarray方法,本博客同時給出了它的官方鏈接。
returns
: ndarray,即返回一或多維數組這裡有兩種使用方法,可以使用np.reshape(r,(-1,1),order='F')
,也可以使用r1=r.reshape((-1,1),order='F')
,這裡選擇使用第二種方法。通過示例可以觀察不同的order參數效果。
通過例子可以看出來,F
是優先對列信息進行操作,而C
是優先行信息操作。如果未對r的格式進行設置,那麼我們rashape的時候以“A”的順序進行order的話,它的效果和“C”相同。
做與第2步類似的操作
由下圖可知:np.asfortranarray(r)
,並不會對r的輸出結果產生影響,但是由於改變了r的存儲類型,會改變“A”格式的輸出結果,使其與“F”相同。
參考文獻:
numpy中reshape方法詳解
numpy.reshape官方文檔