もっと詳しく

Pythonで「2次元配列から要素を取り出し」をする方法について解説します。

  • Pythonで2次元配列から要素を取り出す方法について知りたい
  • Pythonで2次元配列を作成するにはどのようにすれば良いか知りたい
  • PythonのNumPyで2次元配列の要素を取り出す方法について知りたい
    など

この記事では、上記のような疑問や悩みについて解説します。

【Python】「2次元配列から要素を取り出し」について解説

【準備】2次元配列を作成

まずは「2次元配列」を作成しましょう。

通常のリストで作成する方法と、NumPyで作成する方法を紹介します。

【リスト型変数】2次元配列を作成

# 2次元配列を作成
array_2d = [[0,1,2,3],
            [4,5,6,7],
            [8,9,10,11]]

print(array_2d)
# [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

【NumPy】2次元配列を作成

import numpy as np

# NumPyで2次元配列を作成
array_2d_np = np.arange(12).reshape(3, 4)

print(array_2d_np)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]
    

numpyは配列(リスト)計算を高速にするためのPythonのライブラリです!

NumPyは、プログラミング言語Pythonにおいて数値計算を効率的に行うための拡張モジュールである。効率的な数値計算を行うための型付きの多次元配列のサポートをPythonに加えるとともに、それらを操作するための大規模な高水準の数学関数ライブラリを提供する。
Wikipediaより

【要素の取り出し】2次元配列から要素を取り出し

【リスト型変数】2次元配列から要素を取り出し

print(array_2d[0][2])
# 2

# リストで作成した2次元配列からの要素の取り出し
for row in range(len(array_2d)):
    for col in range(len(array_2d[row])):
        print(array_2d[row][col]) 
# 0
# 1
# :
# 10
# 11

【NumPy】2次元配列から要素を取り出し

# NumPyで作成した2次元配列からの要素の取り出し
print(array_2d_np[0][2])
# 2

# NumPyで作成した2次元配列からの要素の取り出し(forループ)
for row in range(len(array_2d_np)):
    for col in range(len(array_2d_np[row])):
        print(array_2d_np[row][col]) 
# 0
# 1
# :
# 10
# 11

NumPyでは、2次元配列の要素を取り出す方法として、[行番号, 列番号]でも指定できます。

# NumPyで作成した2次元配列からの要素の取り出し
print(array_2d_np[0,2])
# 2

# NumPyで作成した2次元配列からの要素の取り出し(forループ)
for row in range(len(array_2d_np)):
    for col in range(len(array_2d_np[row])):
        print(array_2d_np[row, col]) 
# 0
# 1
# :
# 10
# 11

【行の取り出し】2次元配列から要素(行)を取り出し

【リスト型変数】2次元配列から要素(行)を取り出し

# 行の取り出し
print(array_2d[1])
# [4, 5, 6, 7]

# スライスを使って複数行の取り出し
print(array_2d[0:3])
# [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

【NumPy】2次元配列から要素(行)を取り出し

# 行の取り出し
print(array_2d_np[1])
# [4 5 6 7]

# スライスを使って複数行の取り出し
print(array_2d_np[0:3])
#[[ 0  1  2  3]
# [ 4  5  6  7]
# [ 8  9 10 11]]

# スライスを使って行の取り出し(列番号の省略)
print(array_2d_np[1,])
# [4 5 6 7]

【列の取り出し】2次元配列から要素(列)を取り出し

【リスト型変数】2次元配列から要素(列)を取り出し

# 列の取り出し(1列)
for row in range(len(array_2d)):
    print(array_2d[row][1]) 
# 1
# 5
# 9

# 列の取り出し(複数列)
for row in range(len(array_2d)):
    print(array_2d[row][1], array_2d[row][2])
# 1 2
# 5 6
# 9 10

【NumPy】2次元配列から要素(列)を取り出し

# 列の取り出し(1列)  ※結果は行ベクトルとなる
print(array_2d_np[:, 1])
# [1 5 9]

# 列の取り出し(複数列)
print(array_2d_np[:, 1:3])
#[[ 1  2]
# [ 5  6]
# [ 9 10]]

# 列の取り出し(1列を列ベクトルとして取り出す)
print(array_2d_np[:, 1:2])
#[[1]
# [5]
# [9]]

【列の取り出し】リスト内包表記で2次元配列から要素(列)の取り出し

MEMO

「リスト内包表記」とは、for ループ処理をかんたん・シンプルに記述できる記法のことです。

例:1~5 までの数値を2 乗した値を持つリストを作りたい場合のリスト内表表記は次のように書くことができます。

print([x ** 2 for x in [1,2,3,4,5]])
# [1,4,9,16,25]

【リスト型変数】内包表記で2次元配列から要素(列)を取り出し

# 内包表記で列の取り出し(リスト型変数)  ※結果は行ベクトルとなる
print([row[1] for row in array_2d])
# [1, 5, 9]

# 内包表記で複数列の取り出し(リスト型変数) ※結果は行ベクトルとなる
print([row[1:3] for row in array_2d])
# [[1, 2], [5, 6], [9, 10]]

【NumPy】内包表記で2次元配列から要素(列)を取り出し

# 内包表記で列の取り出し(NumPy) ※結果は行ベクトルとなる
print(np.array([row[1] for row in array_2d_np]))
# [1 5 9]

# 内包表記で複数列の取り出し(NumPy)
print(np.array([row[1:3] for row in array_2d_np]))
#[[ 1  2]
# [ 5  6]
# [ 9 10]]

まとめ

  • Pythonで2次元配列から要素を取り出す方法は「リスト型変数」と「NumPy」の2つの方法がある。
  • Pythonで2次元配列から要素を取り出す場合、要素1つ、行単位、列単位の取り出しが可能
  • Pythonで2次元配列から要素を取り出す場合、リスト内包表記を使った方法でも要素の取り出しが可能