イントロダクション
この記事では、Pythonの配列スライスの概念を理解するつもりです。
アレイスライス
Python は配列のスライシングをサポートしています。
これは、ユーザが定義した開始インデックスと終了インデックスに基づいて、与えられた配列から新しい部分配列を作成することです。
配列のスライスは、以下のいずれかの方法で行うことができます。
配列のスライスは、Pythonのスライスメソッドに従うと簡単に行うことができます。
その構文は以下のとおりです。
arr[ start : stop : step ] |
また、Pythonにはslice()という関数があり、スライスされるインデックスを含むsliceオブジェクトを返します。
このメソッドを使用するためのシンタックスは以下のようになります。
slice (start, stop[, step])
|
どちらの場合も、以下のようになります。
- start は、配列 arr をスライスする際の開始インデックスです。デフォルトでは 0 に設定されています.
- stop は,スライス操作を終了するインデックスです.デフォルトでは,配列の長さに等しくなります.
- step は,開始から終了までのスライス処理のステップ数です.デフォルトでは 1 に設定されています。
この記事もチェック:PythonのNumPyでの配列の作成やスライス、変更について解説する
Pythonの配列スライスの方法
さて、両方のメソッドを使用するための構文がわかったので、いくつかの例を見て、スライスの手順を理解しましょう。
以下の例では、arrayモジュールからの配列と、NumPyの配列の両方を考えてみます。
1. パラメータが1つの場合
start, stop, stepのデフォルト値はそれぞれ0, 配列の長さ, 1に等しい。
それでは、その方法を見てみましょう。
import array
import numpy as np
#array initialisation array_arr = array.array( 'i' ,[ 1 , 2 , 3 , 4 , 5 ])
np_arr = np.array([ 6 , 7 , 8 , 9 , 10 ])
#slicing array with 1 parameter print ( "Sliced array: " , array_arr[: 3 ])
print ( "Sliced NumPy array: " , np_arr[: 4 ])
|
結果は以下の通りです。
Sliced array: array( 'i' , [ 1 , 2 , 3 ])
Sliced NumPy array: [ 6 7 8 9 ]
|
ここでは、2つの配列を初期化しました。
1つは array
モジュールから、もう1つは NumPy
配列からです。
1つのパラメータを使用して両者をスライスした結果が出力されています。
両方のケースでわかるように、startとstepはデフォルトで0と1に設定されています。
スライスされた配列はインデックス0から(stop-1)の要素を含んでいます。
これはPythonの配列スライスの中で最も高速な方法の一つです。
2. Pythonで2つのパラメータを使った配列スライシング
ここでも、start, stop, endのうち、任意の2つのパラメータを指定し、3つ目のパラメータにデフォルト値を考慮して、Pythonで配列のスライシングを行うことができます。
例を挙げてみましょう。
import array
import numpy as np
#array initialisation array_arr = array.array( 'i' ,[ 1 , 2 , 3 , 4 , 5 ])
np_arr = np.array([ 6 , 7 , 8 , 9 , 10 ])
#slicing array with 2 parameters print ( "Sliced array: " , array_arr[ 2 : 5 ])
print ( "Sliced NumPy array: " , np_arr[ 1 : 4 ])
|
を出力します。
Sliced array: array( 'i' , [ 3 , 4 , 5 ])
Sliced NumPy array: [ 7 8 9 ]
|
この場合も、スライスされた array
モジュールの配列と NumPy
配列は、指定されたインデックス start から (stop-1)
までの要素を含み、ステップは1に設定されます。
したがって、出力は正当なものとなります。
この記事もチェック:NumPyでランダムサンプリング|配列を2次元や範囲指定でランダムに抽出する方法
3. stepパラメータを指定した場合
3つのパラメータを指定すると、Pythonで配列の先頭から(stop-1)までを、指定したステップに等しくジャンプするようにスライスすることができます。
以下の例を見て、よく理解してください。
import array
import numpy as np
#array initialisation array_arr = array.array( 'i' ,[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ])
np_arr = np.array([ 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 ])
#slicing array with step parameter print ( "Sliced array: " , array_arr[ 1 : 8 : 2 ])
print ( "Sliced NumPy array: " , np_arr[ 5 : 9 : 3 ])
|
結果は以下の通りです。
Sliced array: array( 'i' , [ 2 , 4 , 6 , 8 ])
Sliced NumPy array: [ 16 19 ]
|
同様に、ここでは、与えられたインデックスstartからstop-1までの配列の値でスライスされた配列が得られます。
唯一の違いはステップの値で、今回は array
モジュールの配列と NumPy
の配列に対して、それぞれ 2 と 3 を指定しています。
したがって、今回は各インデックスのジャンプは、与えられたステップの値になります。
4. Pythonのslice()メソッドによる配列のスライシング
Pythonの slice()
メソッドは、startからstop-1までのインデックスの並びを、与えられたステップの値で返します。
前のケースと同様に、ここでも start と stop のデフォルト値は 0 であり、step は 1 に等しくなります。
import array
import numpy as np
#array initialisation array_arr = array.array( 'i' ,[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ])
np_arr = np.array([ 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 ])
s = slice ( 3 , 9 , 3 )
#slicing array with slice() print ( "Sliced array: " , array_arr[s])
print ( "Sliced NumPy array: " , np_arr[s])
|
結果を出力すると、以下の様になります。
Sliced array: array( 'i' , [ 4 , 7 ])
Sliced NumPy array: [ 14 17 ]
|
ここではまず、2つの配列を初期化しています。
1つは array
モジュールから、もう1つは NumPy
モジュールからです。
slice()メソッドはstart, stop, stepをそれぞれ3, 9, 3と指定して呼び出されます。
したがって、配列にこのシーケンスs` を渡すと、インデックス 3 と 6 の要素を含む値を持つスライスされた配列が得られます。
したがって、出力は正当化されます。
注意:常に元の配列はそのままの形で保存され、手を加えられることはありません。
必要であれば、スライスされた配列を何らかの変数に格納することができます。
まとめ
この記事では、Pythonの配列スライスの概念について学びました。
さらに質問がある場合は、以下にコメントしてください。