NumPy 配列のイテレーション

配列イテレーション

イテレートとは、要素を逐次に巡回することを意味します。

NumPyで多次元配列を処理する際には、Pythonの基本的なforループを使用してこの操作を実行できます。

1-D 配列に対してイテレートする場合、各要素を逐次に巡回します。

以下の一次元配列の要素をイテレートする

import numpy as np
arr = np.array([1, 2, 3])
for x in arr:
  print(x)

実行例

2-D 配列をイテレートする

2-D 配列では、すべての行を巡回します。

以下の2次元配列の要素をイテレートする

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in arr:
  print(x)

実行例

n-D 配列をイテレートする場合、それは逐次にn-1次元を巡回します。

実際の値、スカラを返すには、各次元の配列をイテレートする必要があります。

2-D 配列の各スカラ要素をイテレートする

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in arr:
  for y in x:
    print(y)

実行例

3-D 配列をイテレートする

3-D 配列では、すべての 2-D 配列を巡回します。

以下の 3-D 配列の要素をイテレートする

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 ループは、高次元の配列に対して難しいことがあります。

以下の 3-D 配列を巡回します:

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 は配列内の要素のデータ型を就地変更しません(要素は配列内に位置します),そのため、この操作を実行するために他のスペースが必要であり、これらの追加スペースは buffer と呼ばれます、 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)

実行例

異なるステップで巡回

フィルタリングしてから巡回することができます。

2D 配列のスカラー要素を順に巡回し、1つの要素をスキップします:

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()を使用して列挙する

列挙とは、順番に事物の番号を挙げることです。

迭代中に要素の対応するインデックスが必要な場合、これらの用例に対して使用できます 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)

実行例