【NumPy】ndarrayから複数のインデックスを指定し複数の要素を一度に取得する方法[Python]

  • URLをコピーしました!
目次

NumPy

前回、PythonのOpenCVで画像に大きなノイズ(むしろ塗りつぶし)を入れる方法を紹介しました。

今回はNumPyのndarrayを使って複数のインデックスを指定し、複数の要素を一度に取得する方法を紹介します。

それでは始めていきましょう。

複数のインデックスを指定し、複数の要素を一度に取得

まずはndarrayの要素の取得方法のおさらいからです。

ndarrayからはリストの様に「ndarray名[インデックス]」で要素を取得することができます。

import numpy as np

a = np.array([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])

print(a[2])

実行結果
2

実はここで指定するインデックスは複数でも良く、リスト形式で複数指定すると複数の要素を一度に取得することができます。

import numpy as np

a = np.array([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])

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

実行結果
[2 4 8]

この方法は通常のリストではできず、エラーとなります。

a = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

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

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[6], line 3
      1 a = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
----> 3 print(a[[1, 2, 4]])

TypeError: list indices must be integers or slices, not list

また指定方法がリストではなく、タプルだとエラーとなります。

import numpy as np

a = np.array([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])

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

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In[10], line 5
      1 import numpy as np
      3 a = np.array([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
----> 5 print(a[(1, 2, 4)])

IndexError: too many indices for array: array is 1-dimensional, but 3 were indexed

二次元ndarrayの場合

二次元のndarrayでも複数のインデックスをリスト形式で指定することで、複数の要素を一度に取得することができます。

import numpy as np

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

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

実行結果
[1 5]

二次元の場合はタプル形式で指定することもできます。

import numpy as np

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

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

実行結果
[1 5]

もちろん通常のリストではこんなことできません。

a = [[0, 1, 2],
    [3, 4, 5],
    [6, 7, 8]]

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

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[9], line 5
      1 a = [[0, 1, 2],
      2     [3, 4, 5],
      3     [6, 7, 8]]
----> 5 print(a[(0, 1)][(1, 2)])

TypeError: list indices must be integers or slices, not tuple

指定するインデックスを変数として与える方法

複数のインデックスをリスト形式やタプル形式で与えることができるということは、変数として与えることができるということです。

import numpy as np

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

x_list = [0, 1]
y_list = [1, 2]

print(a[x_list, y_list])

実行結果
[1 5]
import numpy as np

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

x_tupple = (0, 1)
y_tupple = (1, 2)

print(a[x_tupple, y_tupple])

実行結果
[1 5]

このようにNumPyのndarrayで複数のインデックスを指定して、複数の要素を一度に取得できることを全然知らなかったので、これから活用していこうと思います。

次回はmatplotlibでxlim、ylimでグラフエリアの最大値、最小値を取得する方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次