NumPy:【ループ処理:イテレータ】の実行例


サマリ

  • np.nditer(イテレータ)
    • 呼び方:順次処理、遂次処理
    • ndarray(NumPy配列)の要素を順に取り出す
    • while文でループしながら取り出す

前提

サンプルコード

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() …… 次のデータに移る


Posted by futa