はじめに
この実験では、Python の Numpy ライブラリにおけるインデックス付けとスライシングの概念を扱います。配列から要素の範囲をアクセス、変更、抽出する方法を学びます。Numpy ライブラリにおけるさまざまなインデックス付けの方法についても、例を用いて説明し示します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション終了後にフィードバックを提供してください。すぐに問題を解決いたします。
基本を理解する
- NumPy 配列では、スライシングは基本的に配列から要素の範囲を抽出する方法です。
- ndarray オブジェクトの要素は常に 0 ベースのインデックスに従います。
- Numpy ライブラリの ndarray オブジェクトの内容にアクセスして変更するには、Python の組み込みコンテナオブジェクトと同じようにインデックス付けまたはスライシングを行うことができます。
Numpy 配列のスライシング
- 配列のスライシングは、Python のリストと同じ方法で行われます。
- 配列に 100 個の要素があり、一部の値のみを抽出したい場合、スライシングを行って、完全な ndarray から必要な値のセットを抽出することができます。
- Python のリストのスライシングを学ぶと、同じことを Numpy の ndarray に適用できます。
Numpy 配列のインデックス付け
- Numpy ライブラリで利用可能なインデックス付け方法は 3 種類あります。
- フィールドアクセス - これは値のインデックスを使用した直接的なフィールドアクセスです。
- 基本的なスライシング - 基本的なスライシングは、Python の基本的なスライシングの概念を n 次元に拡張したものです。
- 高度なインデックス付け(この実験では扱いません)
例
- これらの概念をより深く理解するために、いくつかの例を見てみましょう。
例 1 - Ndarray のスライシング
import numpy as np
a = np.arange(10)
print("The ndarray is :")
print(a)
s = slice(2,7,2)
print("After applying slice() Function:")
print (a[s])
- 上記のコードは、arange() 関数を使用して ndarray オブジェクトを作成します。
- スライスオブジェクトは、それぞれ開始値、終了値、ステップ値が 2、7、2 で定義されます。
- その後、このスライスオブジェクトが ndarray に渡されます。インデックス 2 から始まり、ステップ値 2 で 7 までの部分がスライスされます。
例 2 - 単一の要素のスライシング
import numpy as np
a = np.arange(15)
print("The array is :")
print(a)
## using the index directly
b = a[7]
print("The Eighth item in the array is :")
print (b)
- 上記のコードは、ndarray オブジェクトから単一の要素をスライシングします。
- インデックス付けを使用することで、単一の配列を簡単にスライシングできます。
例 3
import numpy as np
a = np.arange(20)
print("The array is :")
print(a)
print("Slicing of items starting from the index:")
print(a[2:])
- 上記のコードは、指定されたインデックスから最後のインデックスまたは最後の要素までの項目をスライシングします。
例 4
import numpy as np
a = np.arange(20)
print("The array is :")
print(a)
print("Slicing of items between two given indexes:")
print(a[2:8])
- 上記のコードは、2 つの指定されたインデックスの間のすべての要素をスライシングします。
- 終了インデックスの値は除外されます。
エリプシスの使用
- スライシングする際、エリプシス(...)は、配列の次元と同じ長さの選択タプルを作成するために使用されます。
- 多次元 ndarray の場合、エリプシスを行の位置に使用すると、行内の要素から構成される ndarray が返され、同様に列についてもそうなります。
import numpy as np
a = np.array([[11,2,23],[33,44,5],[84,25,16]])
print ("The array is :")
print (a )
print ('\n')
#To return array of items in the second column
print ('The items in the second column are:')
print (a[..., 1] )
print ('\n')
## In order to slice all items from the second row
print ('The items in the second row are:')
print (a[1,...])
print ('\n')
## In order to slice all items from column 1 onwards
print ('The items onwards to column 1 are:' )
print (a[..., 1:])
まとめ
この実験では、Numpy ライブラリにおけるインデックス付けとスライシングの概念を扱いました。Numpy ライブラリにおけるさまざまなインデックス付け方法と配列をスライシングするさまざまな方法を学びました。また、これらの概念の実際の実装を示す例も見ました。