我試圖接受這個(4x4)矩陣的輸入:
1.0 2.0 3.0 4.0
5.0 6.0 7.0 8.0
9.0 10.0 11.0 12.0
13.0 14.0 15.0 16.0
并使其顯示為:
1.0 5.0 9.0 13.0
2.0 6.0 10.0 14.0
3.0 7.0 11.0 15.0
4.0 8.0 12.0 16.0
我需要以僅適用于 NxN 矩陣的方式撰寫代碼。我想我可能需要做一個嵌套的for in回圈,但我對如何讓它正常作業感到困惑。如果你能幫助我那就太好了!
uj5u.com熱心網友回復:
您要做的是對矩陣進行轉置。轉置矩陣意味著將所有列更改為行(或等效地,將行更改為列)。使用 numpy 很容易實作:
>>> import numpy as np
>>> a = np.random.randint(10, size=(5, 5))
>>> a
array([[3, 3, 4, 9, 8],
[9, 0, 0, 5, 6],
[4, 1, 2, 4, 5],
[2, 9, 0, 8, 0],
[9, 9, 2, 3, 0]])
>>> a.T
array([[3, 9, 4, 2, 9],
[3, 0, 1, 9, 9],
[4, 0, 2, 0, 2],
[9, 5, 4, 8, 3],
[8, 6, 5, 0, 0]])
>>> np.transpose(a)
array([[3, 9, 4, 2, 9],
[3, 0, 1, 9, 9],
[4, 0, 2, 0, 2],
[9, 5, 4, 8, 3],
[8, 6, 5, 0, 0]])
例如,要手動執行更多操作
>>> import numpy as np
>>> matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
])
>>> transposed_matrix = np.empty((3, 3))
>>> for i in range(3):
... transposed_matrix[:, i] = matrix[i, :]
>>> transposed_matrix
array([[1. 4. 7.]
[2. 5. 8.]
[3. 6. 9.]])
或者完全沒有 numpy(可能有很多方法可以做到這一點,而且可能比我做的更聰明!=)):
>>> matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
>>> transposed_matrix = []
>>> for i in range(3):
... tmp = []
... for j in range(3):
... tmp.append(matrix[j][i])
... transposed_matrix.append(tmp)
>>> transposed_matrix
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/345164.html
上一篇:方法外的類內代碼vs類外的代碼
