Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで行列の転置を求めるプログラムの作成方法

行列の転置とは

n × n の行列 M が与えられたとき、その転置行列(transpose)を求めることを考えます。転置行列とは、行と列のインデックスを入れ替えた行列のことで、形式的には、すべての行番号 r と列番号 c に対して次の関係が成り立ちます。

matrix[r][c] = matrix[c][r]

つまり、元の行列の r 行 c 列にある要素は、転置後の行列では c 行 r 列へと移動します。

入力例

726
372
537

出力例(転置行列)

735
273
627

解法のアプローチ

この問題は、以下の手順に従って解くことができます。

  • 結果を格納するための新しいリスト M を用意します。
  • カウンター tracker を 0 で初期化します。
  • tracker が行列の行数より小さい間、次の処理を繰り返します。
    • 一時リスト temp を新しく作成します。
    • 行列の各行 row について、row[tracker](tracker 番目の要素)を temp に追加していきます。これにより、各列の要素を集めたリストが完成します。
    • temp を M に追加します。
    • tracker を 1 増やします。
  • すべての列を処理し終えたら、M を返します。

Pythonでの実装例

それでは、実際のコードを見て理解を深めましょう。

サンプルコード

class Solution:
    def solve(self, matrix):
        M = []
        tracker = 0
        while tracker < len(matrix):
            temp = []
            for row in matrix:
                temp += [row[tracker]]
            M += [temp]
            tracker += 1
        return M

ob = Solution()
matrix = [[7, 2, 6], [3, 7, 2], [5, 3, 7]]
print(ob.solve(matrix))

入力

[[7, 2, 6],
[3, 7, 2],
[5, 3, 7]]

出力

[[7, 3, 5], [2, 7, 3], [6, 2, 7]]

補足:zip()を使ったより簡潔な方法

Pythonでは、組み込み関数 zip() を活用すると、転置行列をわずか1行で求めることも可能です。

matrix = [[7, 2, 6], [3, 7, 2], [5, 3, 7]]
transposed = [list(row) for row in zip(*matrix)]
print(transposed)

zip(*matrix) は、行列の各行を引数として展開し、同じ位置にある要素同士をグループ化します。その結果、行と列が入れ替わった転置行列が得られます。実務では、この方法の方がコードが短く、可読性も高くなるためおすすめです。

  1. Pythonで行列の転置を求めるプログラム

    この記事では、与えられた問題に対する解法とアプローチについて詳しく解説します。 問題文 ある行列が与えられたとき、その転置を同じ行列に格納し、結果を表示する必要があります。 行列の転置とは、行を列に、列を行に入れ替えたものです。言い換えれば、行列Aの転置は、要素A[i][j]をA[j][i]と入れ替えることで得られます。 実装例 N = 4 def transpose(A): for i in range(N): for j in range(i+1, N): A[i][j], A[j][i] = A[j][i], A[i][j] # ドライ

  2. Pythonで配列(リスト)の合計を求める方法をわかりやすく解説

    この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に