【Python】NumPy配列のアクセス方法

調べるうさぎ

こんにちは!

今回はNumPy配列の様々なアクセス方法について紹介していきます。

以降のプログラムでは、簡略化のため、以下のNumPyライブラリのインポートは省略しますが、プログラムを実行する際には必ず忘れないようにしましょう。

import numpy as np




1. 要素の参照と更新

配列の要素にアクセスするには、リストと同じようにインデックス番号を用います。


1.1 1次元配列の参照と更新

以下のプログラムは、1次元配列の要素を参照するプログラムです。

a = np.array([0, 1, 2, 3, 4])

print(a[2])
print(a[4])
print(a[-1])

実行結果

2
4
4

インデックス番号は0から始まるため、配列の一番先頭にアクセスするには0を指定します。

また、a[-1]とすると、配列の最後の要素を指定するため、a[4]と同じ結果になっています。

次に、配列の要素の更新方法について説明します。

以下のプログラムは、配列の要素を更新するプログラムです。

b = np.array([0, 1, 2, 3, 4])
b[2] = 0

print(b)

実行結果

[0 1 0 3 4]

上記のプログラムでは、配列の3つ目の要素を0に更新しています。

1.2 2次元配列の参照

2次元配列の参照方法は2種類あります。

a[行番号][列番号]a[行番号, 列番号]の2つの参照方法があるためどちらも覚えておきまししょう。

以下のプログラムは、2次元配列を参照するプログラムです。

a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

print(a[1][2])
print(a[1, 2])

実行結果

5
5

実行結果はどちらの参照方法でも同じになります。


2. 配列のスライス

配列のスライスも、リストなどの場合と同じです。

2.1 1次元配列のスライス

1次元配列のスライスは、スライスする範囲を[開始位置, 終了位置]で指定します。

終了位置の番号は含まれないので注意が必要です。

以下のプログラムは、1次元配列のスライスを行うプログラムです。

a = np.array([0, 1, 2, 3, 4, 5])

print(a[:]) #全ての要素
print(a[:3]) #インデックス番号0~2の要素
print(a[3:]) #インデックス番号3~最後の要素
print(a[2:5]) #インデックス番号2~4の要素
print(a[::2]) #先頭からインデックス番号1個飛ばしの要素

実行結果

[0 1 2 3 4 5]
[0 1 2]
[3 4 5]
[2 3 4]
[0 2 4]


2.2 多次元配列のスライス

2次元配列のスライスは、[行のスライス指定, 列のスライス指定]のように指定します。

全ての行または全ての列を指定するには、1次元配列の場合と同様に、[:]と指定するか、何も書かないかの2つ方法があります。

以下のプログラムは、2次元配列のスライスを行うプログラムです。

a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

print(a[:2, ]) #行0~1, 列全て
print(a[:, 1:]) #行全て, 1列目以降
print(a[1:, 1:]) #行1~最後, 列1~最後

実行結果

[[0 1 2]
 [3 4 5]]
[[1 2]
 [4 5]
 [7 8]]
[[4 5]
 [7 8]]



3. 条件式で要素にアクセスする

リストなどでは、条件式で要素にアクセスする際には、for文やリスト内包表記などを用いる必要があります。

しかしNumPy配列では、条件式を指定して簡単に要素にアクセスすることができます。


3.1 条件に合う要素を参照する

[条件式]で、条件式に合う要素のみを参照することができます。

参照された要素はまとめて、新しい配列として返されます。

以下のプログラムは、条件式で条件に合う要素を参照するプログラムです。

a = np.array([2, 3, 1, 8, 4, 3, 6, 1, 3, 5])

print(a[a>=4])

実行結果

[8 4 6 5]



3.2 条件に合う要素を更新する

条件に合う要素を更新するには、普通の配列と同様に行います。

以下のプログラムは、条件に合う要素を更新するプログラムです。

b = np.array([2, 3, 1, 8, 4, 3, 6, 1, 3, 5])
b[b%2==0] = 0

print(b)

実行結果

[0 3 1 0 0 3 0 1 3 5]




4. まとめ

様々なNumPy配列のアクセス方法について理解できたでしょうか?

NumPy配列では、リストなどと同じように要素を参照、更新できたり、さらには条件式を指定して簡単に要素にアクセスできるため非常に便利です。

なので、是非使いこなせるようにしましょう!

まとめ記事に戻る


“【Python】NumPy配列のアクセス方法” への1件の返信

  1. NumPy配列のアクセス方法は非常に多様に使える。
    (1)どう使えば良いのかわかりにくい。
    (2)記述された時読みにくい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です