NumPyの ndarray は多次元配列を扱えるため、2次元配列として定義することで数学的な「行列」を表現できます。
提示されたコードにはいくつかのタイプミス(nparray→np.array、カンマがドットになっている等)がありましたので、修正して解説します。 特に行列操作では 「行 (Row)・列 (Column)」 の順番と、スライシングの [行範囲, 列範囲] という記法が重要です。
目次
実行可能なサンプルコード
以下のコードは、3×3の行列を作成し、要素へのアクセスや切り出し(スライス)を行う完全な例です。
import numpy as np
def matrix_operations_demo():
print("=== 1. 行列の生成 ===")
# リストのリストを渡して2次元配列を作ります
# 修正: カンマ区切りにし、np.arrayを使用
x = np.array([
[11, 12, 13],
[21, 22, 23],
[31, 32, 33]
])
print(f"Matrix x:\n{x}")
print(f"Shape: {x.shape}") # (3, 3) -> 3行3列
print("\n=== 2. 要素へのアクセス (インデックス) ===")
# 記法: x[行インデックス, 列インデックス]
# 0始まりであることに注意してください
# 0行目の2列目 (13)
val1 = x[0, 2]
print(f"x[0, 2]: {val1}")
# 2行目の0列目 (31)
val2 = x[2, 0]
print(f"x[2, 0]: {val2}")
print("\n=== 3. スライス (範囲抽出) ===")
# 記法: x[開始行:終了行, 開始列:終了列]
# 終了インデックスは「含まれない」ルールです
# 0行目〜1行目(2の手前)、かつ 0列目〜1列目(2の手前) を抽出
# つまり左上の2x2行列を取り出します
sub_matrix = x[0:2, 0:2]
print(f"x[0:2, 0:2] (左上2x2):\n{sub_matrix}")
print("\n=== 4. 行の抽出 ===")
# インデックスを1つだけ指定すると「行」が取得されます
# 0行目すべて
row_0 = x[0]
print(f"x[0] (1行目): {row_0}")
print("\n=== 5. 列の抽出 ===")
# 「:」は「すべて」を意味します
# 記法: x[:, 列インデックス] -> 「全行の、指定した列」という意味
# 1列目 (真ん中の縦列: 12, 22, 32)
col_1 = x[:, 1]
print(f"x[:, 1] (2列目): {col_1}")
if __name__ == "__main__":
matrix_operations_demo()
解説:インデックス操作のルール
1. 座標の指定 x[row, col]
Excelなどの表計算ソフトとは異なり、プログラミングでは 0から数え始めます。
x[0, 0]: 左上(最初の要素)x[1, 2]: 2行目の3列目
2. スライシング x[start:end]
0:2と書いた場合、インデックス0と1が対象になります(2は含まれません)。:だけ書くと「その次元のすべて」という意味になります。
3. 列を取り出すテクニック x[:, i]
特定の「列」だけを取り出したい場合、行の指定部分に :(全行)を指定するのがポイントです。 これはデータ分析で「特定の項目のデータだけを抜き出す」際によく使われます。
