NumPy:【ループ処理:イテレータ】の実行例
サマリ
- np.nditer(イテレータ)
- 呼び方:順次処理、遂次処理
- ndarray(NumPy配列)の要素を順に取り出す
- while文でループしながら取り出す
前提
- np.arange
- np.reshape
サンプルコード
np.nditerの動きを確認
データ作成
import numpy as np
x = np.arange(6).reshape(2,3)
print(x)
print(x.shape)
[[0 1 2] [3 4 5]] (2, 3)
- 形状(2,3)のndarray(NumPy配列)を作成
np.nditerでイテレータ作成
it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite'])
print(type(it))
<class 'numpy.nditer'>
- flagsオプション
- multi_index …… idx = it.multi_indexで位置を取り出し
- op_flagsオプション
- readwrite …… 書き換えOK
ループ処理
while not it.finished:
idx = it.multi_index
print(f'index:{idx}')
print(f'data:{x[idx]}')
it.iternext()
index:(0, 0) data:0 index:(0, 1) data:1 index:(0, 2) data:2 index:(1, 0) data:3 index:(1, 1) data:4 index:(1, 2) data:5
- 合計のループ回数は6回
- 処理の流れ
- 1次元目が0:0~2までの3回ループする
- 1次元目が1:0~2までの3回ループする
- 取り出されるデータの順序
- 1行目の1列目、2列目、3列目:0,1,2
- 2行目の1列目、2列目、3列目:3,4,5
- 文法
- it.multi_index …… データ番号を取得する
- このインデックス番号を使ってx[idx]のように取り出す
- 2次元のこの例だと(0,0)のようにタプルでデータの位置を示す
- it.iternext() …… 次のデータに移る
- it.multi_index …… データ番号を取得する
