Python で行列を転置する
行列は、Python の多次元リストを使用して表すことができます。一度表現すると、行列の乗算、行列の加算、減算など、数学的理論で行列に対して実行できるすべての操作を実行できます。
この記事では、そのような操作の 1つについて説明します。いくつかの関連する例を使用して、Python を使用して行列を転置する方法を学習します。
Python で行列を転置する
Python で行列を転置するには、単純なスタブ関数を記述し、for
ループを使用して入力行列を転置します。
def transpose(matrix):
if matrix == None or len(matrix) == 0:
return []
result = [[None for i in range(len(matrix))] for j in range(len(matrix[0]))]
for i in range(len(matrix[0])):
for j in range(len(matrix)):
result[i][j] = matrix[j][i]
return result
def print_matrix(matrix):
for row in matrix:
print(*row)
array = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
result = transpose(array)
print_matrix(result)
出力:
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
上記のメソッドの時間と空間の複雑さは O(mn)
です。ここで、m
は入力行列の行数、n
は入力行列の列数です。
入力行列全体を反復処理しているため、時間計算量は O(mn)
です。入力行列のコピーを作成し、それを別の変数に格納するため、スペースの複雑さは O(mn)
です。
上記のスタブ関数は、入力行列の形状が m x n
の場合、最初にサイズ n x m
の一時行列を None
値で作成します。ここで、m
は入力行列の行数、n
は入力行列の列数です。
次に、2つのネストされた for
ループを使用して入力行列を反復処理します。2つの for
ループ内で、None
値が入力行列からの実際の値に置き換えられます(result[i][j] = matrix[j][i]
)。最後に、一時行列が出力として返されます。
一時行列を埋めるために 2つのネストされた for
ループを使用する代わりに、スペースを節約するために転置ロジックを 1 行で記述することもできます。
def transpose(matrix):
if matrix == None or len(matrix) == 0:
return []
return [[matrix[i][j] for i in range(len(matrix))] for j in range(len(matrix[0]))]
def print_matrix(matrix):
for row in matrix:
print(*row)
array = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
result = transpose(array)
print_matrix(result)
出力:
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
このソリューションの時間と空間の複雑さも、前のソリューションの O(mn)
と同じです。
Python で NumPy
モジュールを使用して行列を転置する
NumPy
は Python パッケージであり、大規模な多次元行列や配列を操作し、それらに対して複雑で単純な数学演算を実行するためのユーティリティが豊富に用意されています。これらのユーティリティは、入力に対して動的であるだけでなく、高度に最適化されて高速です。
Python で NumPy
モジュールを使用すると、2つの方法で行列を転置できます。1つ目は、NumPy
配列の T
属性を使用する方法で、2つ目は、NumPy
配列の transpose()
メソッドを呼び出す方法です。
上記の 2つの方法の使用方法を理解するには、次の Python コードを参照してください。
numpy.array()
メソッドを使用して NumPy
配列の入力行列を変換する必要があります。この方法の詳細については、ここををクリックしてください。import numpy as np
array = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
array = np.array(array)
print(array.T) # First Method
print(array.transpose()) # Second Method
出力:
[[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]
[ 5 10 15]]
[[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]
[ 5 10 15]]
transpose()
は、NumPy
配列に対していくつかのクールな転置変更を実行するために使用できる axes
引数を受け入れます。このメソッドの詳細については、ここを参照してください。