Pythonで行列(マトリックス)を初期化する2つの方法
はじめに
この記事では、Python 3.xにおいて2次元リストを使って行列(マトリックス)を初期化する方法を解説します。行列の初期化には大きく分けて2つのアプローチがあり、それぞれ特徴が異なります。
方法1:リスト内包表記を使う(Pythonらしい書き方)
まずは、Pythonならではの直感的な初期化方法です。リスト内包表記を活用することで、内側のリスト(各行)を生成しながら、それを複数行へと一気に拡張できます。コードが簡潔になり、Pythonicなスタイルとして好まれる書き方です。
コード例
# 行数を指定
N = 3
# 列数を指定
M = 3
# リスト内包表記で行列を初期化(各要素は i*j を計算)
res = [ [ i*j for i in range(N) ] for j in range(M) ]
# 1行で表示する場合
print("Inline representation:")
[ [ print(res[i][j], end=" ") for i in range(N) ] for j in range(M) ]
print("")
# 複数行で表示する場合
print("Multiline representation")
for i in range(N):
for j in range(M):
print(res[i][j], end=" ")
print("")
出力結果
Inline representation: 0 0 0 0 1 2 0 2 4 Multiline representation 0 0 0 0 1 2 0 2 4
この例では、外側の内包表記が「行」を、内側の内包表記が「列」を担当しています。式 i*j の部分を任意の値や関数に置き換えることで、柔軟に行列の中身を定義できるのがポイントです。
方法2:標準的な二重ループによる方法(汎用的)
次に、どのプログラミング言語でも実装できる、より一般的な方法を見てみましょう。あらかじめゼロで埋めた2次元リストを用意し、二重ループで各要素に値を代入していく、いわば「定番」の手法です。
コード例
# 行数を指定
N = 3
# 列数を指定
M = 3
# ゼロで初期化された2次元リストを用意
lis = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
# 二重ループで各要素に値を代入
for i in range(N):
for j in range(M):
lis[i][j] = i * j
# 結果を複数行で表示
for i in range(N):
for j in range(M):
print(lis[i][j], end=" ")
print("")
出力結果
0 0 0 0 1 2 0 2 4
この方法は処理の流れが明快で、条件分岐を加えたり、要素ごとに異なる計算を行ったりといった拡張も容易です。初心者の方にも理解しやすいのがメリットといえます。
注意点:[[0] * M] * N の罠に気をつける
補足として、よくある落とし穴を紹介します。以下のようにリストの乗算で2次元リストを作ると、すべての行が同じリストオブジェクトへの参照になってしまいます。
matrix = [[0] * 3] * 3 matrix[0][0] = 9 print(matrix) # 出力: [[9, 0, 0], [9, 0, 0], [9, 0, 0]] ← 全行が変更されてしまう!
これを避けるには、リスト内包表記を使って [[0] * M for _ in range(N)] のように各行を独立して生成しましょう。
まとめ
この記事では、Python 3.xで2次元リストを使って行列を初期化する2つの方法を学びました。
- リスト内包表記:簡潔でPythonらしい書き方。小規模な行列や規則性のあるデータに便利。
- 二重ループによる代入:汎用性が高く、複雑なロジックにも対応しやすい標準的な方法。
用途に応じて使い分けることで、より読みやすく保守しやすいコードを書けるようになります。ぜひ実際にコードを動かして、挙動を確認してみてください。
-
Python Tkinterでウィンドウを最大化して初期化する方法
はじめにTkinterでは、アプリケーションを起動すると、デフォルトサイズのウィンドウが自動的に作成されます。ウィンドウのサイズを調整したい場合は、geometry()メソッドを使用することで、幅や高さを自由にカスタマイズできます。しかし、単にサイズを変更するだけでなく、ウィンドウを最大化した状態で起動したい場合もあります。その際に活用できるのがstate()メソッドです。このメソッドにzoomedという状態値を渡すことで、Tkinterウィンドウを画面いっぱいに最大化表示できます。サンプルコード# 必要なライブラリをインポート from tkinter import * # tkinter
-
Pythonで行列を転置する4つの方法を徹底解説!コード例付き
行列の転置とは? 行列の転置(transpose)とは、行列の列と行を入れ替える操作のことです。転置を行うと、元の行列の列が行になり、行が列になります。 具体例を使って理解しましょう。次のような元の行列「x」があるとします。 x = [[1,2],[3,4],[5,6]] この行列「x」には2つの列があり、1つ目の列には 1, 3, 5、2つ目の列には 2, 4, 6 が含まれています。 この行列を転置すると、列が行に入れ替わります。転置後の行列は次のようになります。 x1 = [[1, 3, 5],[2, 4, 6]] このように、転置後の新しい行列「x1」は、元の行列とは値の配置が異なる形