[英]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.