python中reshape後數據排列方式

1. 序言

在python中,我們可能會接觸numpy或者pytorch,tensorflow等,在這些庫或者框架中,他們都有reshape方式,通過reshape可以將給定維度的數組換成另外一個維度。當在使用的時候,如果不清楚原理,我們可能會使用錯並且還沒那麼容易發現自己的錯誤。

2. 如何手動計算

2.1 針對order=“C”

對於任意維度的一個數組,我們可以先按照flatten方式將任意維度數組轉爲1維數組,然後再轉換到指定的維度即可。
注意:在轉換過程中,轉換後的數組元素的個數必須和轉換前數組元素的個數一樣,對於-1,則表示將剩餘元素都分配到那個軸
例如:
[[[[5, 3, 9, 2, 1],
[6, 2, 0, 0, 1],
[6, 2, 6, 5, 7]],
[[0, 8, 1, 1, 6],
[2, 8, 2, 0, 7],
[7, 4, 3, 0, 8]]]]
該數組的維度是(1, 2, 3, 5),想reshape成指定維度數組,則
a. 展開(flatten)
[5, 3, 9, 2, 1, 6, 2, 0, 0, 1, 6, 2, 6, 5, 7, 0, 8, 1, 1, 6, 2, 8, 2, 0, 7, 7, 4, 3, 0, 8]
b. 從中按順序選取數組變成3 × 10
[[5, 3, 9, 2, 1, 6, 2, 0, 0, 1],
[6, 2, 6, 5, 7, 0, 8, 1, 1, 6],
[2, 8, 2, 0, 7, 7, 4, 3, 0, 8]]

c. 變成3 × 1 × 10
[[[5, 3, 9, 2, 1, 6, 2, 0, 0, 1]],
[[6, 2, 6, 5, 7, 0, 8, 1, 1, 6]],
[[2, 8, 2, 0, 7, 7, 4, 3, 0, 8]]]

d. 變成3 × 5 × 2
[[[5, 3],
[9, 2],
[1, 6],
[2, 0],
[0, 1]],
[[6, 2],
[6, 5],
[7, 0],
[8, 1],
[1, 6]],
[[2, 8],
[2, 0],
[7, 7],
[4, 3],
[0, 8]]]

e. 變成(-1, 5)
這個實際上變成(30 / 5, 5),故數組元素如下
[[5, 3, 9, 2, 1],
[6, 2, 0, 0, 1],
[6, 2, 6, 5, 7],
[0, 8, 1, 1, 6],
[2, 8, 2, 0, 7],
[7, 4, 3, 0, 8]]

2.2 驗證

2.2 針對order=“F”

當使用該方式變化時,依舊可以使用flatten方式理解,只不過在flatten時,需要指定flatten的order=“F”,然後維度越高,越先被轉換。

參考博客:https://zhuanlan.zhihu.com/p/72381219

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章