簡體   English   中英

將 3D 矩陣轉換/重塑為 2D 矩陣

[英]Convert/Reshape 3D Matrix to a 2D Matrix

我有一個 3D 矩陣X ,它包含向量作為第 3 維的行。 我想提取每個這樣的向量X(:, x, y)並將其保存為二維矩陣,使得X(:, 0, 0)是二維矩陣的第一行, X(:, 0, 1)第二個,以此類推。 以下粗略的圖形可能有助於說明這一點:

草圖

我知道我可以創建新的 2D 矩陣,然后迭代原始X以添加向量,但是有人對如何快速有效地執行此操作有一些意見嗎?


示例:給定

>>> a = np.arange(9*3).reshape(3,3,3)
>>> a
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])

我想將以下內容作為行,盡管行的順序無關緊要:

array([[ 0,  9, 18],
       [ 1, 10, 19]],
       ...)

使用np.transpose然后像這樣reshape -

X.transpose(1,2,0).reshape(-1,X.shape[0])

解釋 -

1)您想要從X[:, 0, 0]X[:, 0, 1]等處形成行,即,我們必須將axis=0元素“推”到此類的最后一個軸二維數組輸出。 接下來,我們必須決定行的順序,這將由axes=1,2形成。 現在,回到所需的二維數組輸出,在第一行和第二行之間,即在X[:, 0, 0]X[:, 0, 1]axis=1保持不變。 因此,在二維數組輸出中,第二個軸 (axis=1) 將優先於第三個軸 (axis=2)。 因此,在X我們將axis=1推到axis=0並將axis=2推到axis=1 因為,如前所述, X axis=0必須移動到最后一個軸,所以這將是axis=2 所有這些都可以通過X.transpose(1,2,0)來完成。 我們稱之為Y

2) 最后,我們必須將Y重塑為2D數組,使得每行中的元素數量與X.shape[0]相同,這是通過Y.reshape(-1,X.shape[0]) . 因此,最終的解決方案變成了——

X.transpose(1,2,0).reshape(-1,X.shape[0])

樣品運行 -

In [25]: X
Out[25]: 
array([[[ 0.19508052,  0.02481975],
        [ 0.88915956,  0.95974095]],

       [[ 0.23271151,  0.14730822],
        [ 0.56763563,  0.30607283]],

       [[ 0.33259228,  0.42552102],
        [ 0.28950926,  0.47782175]]])

In [26]: X[:, 0, 0]
Out[26]: array([ 0.19508052,  0.23271151,  0.33259228])

In [27]: X[:, 0, 1]
Out[27]: array([ 0.02481975,  0.14730822,  0.42552102])

In [28]: X[:, 1, 0]
Out[28]: array([ 0.88915956,  0.56763563,  0.28950926])

In [29]: X[:, 1, 1]
Out[29]: array([ 0.95974095,  0.30607283,  0.47782175])

In [30]: X.transpose(1,2,0).reshape(-1,X.shape[0])
Out[30]: 
array([[ 0.19508052,  0.23271151,  0.33259228],
       [ 0.02481975,  0.14730822,  0.42552102],
       [ 0.88915956,  0.56763563,  0.28950926],
       [ 0.95974095,  0.30607283,  0.47782175]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM