Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Pythonと行列の解説

Pythonのリストから内包表記で行列の行と列を入れ替えた転置行列のリストを作る方法の解説

PythonでPandasやNumpyを使わないで行列の行と列を入れ替えた転置行列を作る方法の解説

今回はPythonのリスト内包表記の練習みたいなネタです。リストを作る練習ですね。ただしNumpyやPandasなどは使いません。

今回作るコードは数学上の行列の行と列の情報を入れ替えるものです。すなわち、

\( \left[ \begin{array}{cccc} a_{11} & a_{12} \\ a_{21} & a_{22} \\ \end{array} \right] \)

から、

\( \left[ \begin{array}{cccc} a_{11} & a_{21} \\ a_{12} & a_{22} \\ \end{array} \right] \)

へと変更する方法の解説です。行(横に並ぶもの)が列(縦に並ぶもの)に変わっているのがわかるでしょうか。

このように行列と列を入れ替えた行列を数学上は転置行列と言います。

リスト内包表記で行列の行と列を入れ替える方法の解説

前提知識:リストの内包表記について

今回はリストの内包表記を使っています。それについては次の過去記事で説明していますので参考にしてください。

コード例

今回は3行x4列の行列を作って、その行と列を入れ替えるコードを作ります。

\( \left[ \begin{array}{cccc} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 & 10 & 11 & 12 \\ \end{array} \right] \)

これが、

\( \left[ \begin{array}{cccc} 1 & 5 & 9 \\ 2 & 6 & 10 \\ 3 & 7 & 11 \\ 4 & 8 & 12 \\ \end{array} \right] \)

こうなるということです。

ではまず、3行 x 4列の行列を標準のリストを使って作ってみましょう。ちょっと強引にならざるをえないですが、

matrix=[
    [1, 2, 3, 4], 
    [5, 6, 7, 8], 
    [9, 10, 11, 12], 
]

このようになります。

このmatrixオブジェクトの行と列を入れ替えるコードが次です。

[[row[i] for row in matrix] for i in range(4)]

結果は、

[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

となります。これは、数学上の行列だと、

\( \left[ \begin{array}{cccc} 1 & 5 & 9 \\ 2 & 6 & 10 \\ 3 & 7 & 11 \\ 4 & 8 & 12 \\ \end{array} \right] \)

ということです。

解説

[[row[i] for row in matrix] for i in range(4)]

この部分ですが、これは次のような処理の流れとなります。

range(4)によって、数字0,1,2,3が1つず iに代入される。そこでまず最初にi=0となる。
↓
row[i]がrow[0]となる。
そしてmatrixオブジェクトの最初の要素であるリスト[1,2,3,4]がrowに代入される。
このときrow[0]=1
その1を最初の要素とする新しいリスト(☆)が作られる。
↓
次にmatrixオブジェクトの2番めの要素であるリスト[5,6,7,8]がrowに代入される。
そのときrow[0]=5。
上☆のリストに、その5が2番めの要素として追加される。
↓
続いてmatrixオブジェクトの3番めの要素......
(以下略)
↓
i=0の場合が終わったので、i=1の場合へ。
↓
row[i]がrow[1]となる。
そしてmatrixオブジェクトの最初の要素であるリスト[1,2,3,4]がrowに代入される。
このときrow[1]=2
その2を最初の要素とする新しいリスト(☆)が作られる。
↓
次にmatrixオブジェクトの2番めの要素であるリスト[5,6,7,8]がrowに代入される。
そのときrow[1]=6。
上☆のリストに、その6が2番めの要素として追加される。
↓
続いてmatrixオブジェクトの3番めの要素......(以下略)
↓
i=1の場合が終わったので、i=2の場合へ。
↓
以下略

以上のような流れとなります。

また関連記事として次の記事もどうぞ。

Pythonをプロから短期間で合理的にマスターするなら、やはり動画による学習方法がわかりやすくオススメです。世界最大級のオンライン学習サイトUdemy(ユーデミー)【PR】ではPythonのプログラミング講座が入門~応用レベルまで幅広く展開されています。

Udemyの動画講座では講師に質問が可能、動画なのでプログラムの動きがわかりやすく理解しやすい、わかりにくいところを何度も繰り返し再生できる、プログラミングスクールよりもはるかに安いというメリットがあります。

その中でも次のような講座がおすすめです。

他にも多数のプログラミング講座があるのでぜひ活用し、合理的に短期間でプログラミングを身に着けましょう。

愛を分かち合いましょう