目次
NumPy
前回、PythonのOpenCVで画像に大きなノイズ(むしろ塗りつぶし)を入れる方法を紹介しました。
【OpenCV】画像に大きなノイズ(むしろ塗りつぶし)を入れる方法[Python]
OpenCV 前回、PythonのOpenCVを使って白黒、またはRGBのノイズを入れる方法、そして砂嵐ノイズを入れる方法を紹介しました。 前回は1ピクセルのノイズを画像に入れまし…
今回は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でグラフエリアの最大値、最小値を取得する方法を紹介します。
ではでは今回はこんな感じで。
コメント