NumPy配列の反復


配列の反復

反復とは、要素を1つずつ確認することを意味します。

numpyで多次元配列を扱うので for、Pythonの基本的なループを使用してこれを行うことができます。

1次元配列を反復処理すると、各要素が1つずつ処理されます。

次の1次元配列の要素を反復処理します。

import numpy as np

arr = np.array([1, 2, 3])

for x in arr:
  print(x)

2次元配列の反復

2次元配列では、すべての行を通過します。

次の2次元配列の要素を反復処理します。

import numpy as np

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

for x in arr:
  print(x)

n -D配列を反復処理すると、 n-1次元を1つずつ処理します。

実際の値であるスカラーを返すには、各次元の配列を反復処理する必要があります。

2次元配列の各スカラー要素を反復処理します。

import numpy as np

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

for x in arr:
  for y in x:
    print(y)


3D配列の反復

3Dアレイでは、すべての2Dアレイを通過します。

次の3D配列の要素を繰り返します。

import numpy as np

arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])

for x in arr:
  print(x)

実際の値であるスカラーを返すには、各次元の配列を反復処理する必要があります。

スカラーまで繰り返します。

import numpy as np

arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])

for x in arr:
  for y in x:
    for z in y:
      print(z)

nditer()を使用した配列の反復

この関数nditer()は、非常に基本的な反復から非常に高度な反復まで使用できる支援関数です。これは、反復で直面するいくつかの基本的な問題を解決し、例を挙げて説明します。

各スカラー要素での反復

基本的なforループでは、配列の各スカラーを反復処理するために n個 forのループを使用する必要があります。これは、非常に高次元の配列では記述が難しい場合があります。

次の3D配列を繰り返します。

import numpy as np

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

for x in np.nditer(arr):
  print(x)

異なるデータ型の配列の反復

引数を使用op_dtypesして、期待されるデータ型を渡して、反復中に要素のデータ型を変更できます。

NumPyは、要素のデータ型をインプレース(要素が配列内にある場合)で変更しないため、このアクションを実行するために他のスペースが必要です。その余分なスペースはバッファーと呼ばれ、それを有効にするには、nditer()を渡しflags=['buffered']ます。

配列を文字列として繰り返します。

import numpy as np

arr = np.array([1, 2, 3])

for x in np.nditer(arr, flags=['buffered'], op_dtypes=['S']):
  print(x)

異なるステップサイズでの反復

フィルタリングとそれに続く反復を使用できます。

1つの要素をスキップして、2D配列のすべてのスカラー要素を反復処理します。

import numpy as np

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

for x in np.nditer(arr[:, ::2]):
  print(x)

ndenumerate()を使用した列挙型反復

列挙とは、何かのシーケンス番号を1つずつ言及することを意味します。

反復中に要素の対応するインデックスが必要になる場合があります。このndenumerate()メソッドは、これらのユースケースに使用できます。

次の1D配列要素を列挙します。

import numpy as np

arr = np.array([1, 2, 3])

for idx, x in np.ndenumerate(arr):
  print(idx, x)

次の2D配列の要素を列挙します。

import numpy as np

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

for idx, x in np.ndenumerate(arr):
  print(idx, x)