はじめに
この実験では、NumPy 配列を反復処理して個々の要素にアクセスするためにnumpy.nditerオブジェクトをどのように使用するかを学びます。また、nditerオブジェクトのop_flagsパラメータを使用して配列の要素を変更する方法についても学びます。最後に、nditerオブジェクトを使用した NumPy 配列のブロードキャストについて学びます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替えて、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ndarray を作成して numpy.nditer を使って反復処理する
このステップでは、arange() メソッドを使って一次元の NumPy 配列を作成し、その後 numpy.nditer オブジェクトを使ってその配列を反復処理します。
import numpy as np
a = np.arange(0,40,5)
print ("The Original array is:")
print (a)
print ('\n')
## showing elements of array one by one
print ("The Modified array is:")
for x in np.nditer(a):
print(x)
配列の転置を反復処理する
このステップでは、二次元の NumPy 配列を取得し、その転置を求め、nditer オブジェクトを使ってその転置を反復処理します。
import numpy as np
a = np.array([[11,2,3,4],[29,4,15,6],[11,21,39,31]])
print("The array is :")
print(a)
print("The transpose of the array is :")
at = a.T
print(at)
print("Iterating over the array:")
for x in np.nditer(at):
print(x, end=' ')
配列を C スタイルの順序と F スタイルの順序で反復処理する
このステップでは、二次元の NumPy 配列を作成し、その転置を求め、その後nditerオブジェクトを使って C スタイルと F スタイルの順序でその転置を反復処理します。
import numpy as np
a = np.array([[1,2,3,4],[8,9,5,6],[10,20,29,31]])
print("\nPrinting the array:\n")
print(a)
print("\nPrinting the transpose of the array:\n")
at = a.T
print(at)
print("\nIterating over the transposed array in F-style order:\n")
for x in np.nditer(at, order='F'):
print(x, end=' ')
print("\nIterating over the transposed array in C-style order:\n")
for x in np.nditer(at, order='C'):
print(x, end=' ')
ブロードキャストを使って複数の配列を反復処理する
このステップでは、異なる次元の 2 つの NumPy 配列を作成し、nditerオブジェクトを使ったブロードキャストを使ってそれらを反復処理します。
import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('The First array :')
print (a)
print ('\n')
print ('The Second array is')
b = np.array([1, 2, 3, 4], dtype = int)
print (b)
print ('\n' )
print ('The Modified array is')
for x,y in np.nditer([a,b]):
print ("%d:%d" %(x,y))
op_flags を使って配列の値を変更する
このステップでは、一次元の NumPy 配列を作成し、op_flags パラメータを 'readwrite' に設定しながら nditer オブジェクトを使ってその配列を反復処理し、その後反復処理する際に配列の要素を変更します。
import numpy as np
a = np.arange(0,50,6)
a = a.reshape(3,3)
print ('The Original array is:')
print (a)
print ('\n')
for x in np.nditer(a, op_flags=['readwrite']):
x[...] = 2 + x
print ('The Modified array is:')
print (a)
まとめ
この実験では、NumPy の nditer オブジェクトを使って配列を反復処理する方法と、op_flags パラメータを使って反復処理中に配列の要素を変更する方法を学びました。また、nditer オブジェクトを使って複数の配列を同時に反復処理することで、NumPy 配列におけるブロードキャストについても学びました。