イントロダクション
この記事では、Python の Numpy の arange()
メソッドについて説明します。
NumPyはPythonの非常に人気のあるモジュールで、主にその高速なパフォーマンスとコードの信頼性のためにユーザーに使用されています。
Pythonでのプログラミングにベクトル化されたアプローチを提供し、さらにはコードをより簡潔で読みやすくしてくれます。
Numpyのarange()メソッドの基本
Python の NumPy モジュールにある arange()
メソッドは、基本的に、あらかじめ設定された始点と終点、および一定のステップサイズに基づいて、数値の線形列を生成するために使用されます。
構文は以下の通りです。
import numpy as np
np.arange( start , stop , step ,dtype = nome)
|
ここで
- start` は、これから生成される数列の開始点です。シーケンスはこの番号から始まる。
- stop` は、シーケンスが生成されるまでの制限値です。注意:stop はシーケンス自体には含まれず,その前の数値のみが考慮されます.
- ステップの大きさは一様である.デフォルトでは、step として何も渡されない場合、インタープリタは step を 1(1) と見なします。ステップサイズは 0 ではない値でなければならず、そうでなければ
ZeroDivisionError
が発生することを覚えておいてください。 - dtype` は結果の ndarray 要素の型です。デフォルトでは、メソッド内で指定されたパラメータから型を推定します。dtype は none、int、float などです。
Numpyのarange()の例
Numpyのメソッド arange()
の動作を例題を使って理解しましょう。
import numpy as np
#passing start=1, stop=10, and step=2 and dtype=int res = np.arange( 1 , 10 , 2 , int )
#printing the result print ( "The resultant sequence is : " ,res)
#analysing the type of the result print ( "Type of returned result is:" , type (res))
|
結果は、以下の通りになります。
import numpy as np
#passing only one parameter to the arange() method res = np.arange( 5 )
#printing the result print ( "The resultant sequence with one argument : " ,res)
#analysing the type of the result print ( "Type of returned result is:" , type (res))
|
ここで
- NumPy モジュールを
np
としてインポートしています。 - 次に、start, stop, step, dtype にそれぞれ 1, 10, 2, int を渡して
arange()
メソッドを使用し、1 から 9 までの整数からなる配列を step=2 で生成しています。 - この結果得られた配列と、返されたオブジェクトの
type()
を表示すると、ndarray
クラスのメンバであることが判明します。
PythonでNumpyのarange()を使う
arange()メソッドは前のセクションで見たように、start、stop、step、dtypeの4つの引数を取ります。
では、このメソッドを様々な方法で使用し、すべてのケースでどのように動作するかを見ていきます。
1. 引数が1つの場合のarange()の使用
Numpyのarange()メソッドに引数を1つだけ渡した場合、デフォルトではその値をstop引数と見なします。
以下のコード例を見てください。
The resultant sequence with one argument : [ 0 1 2 3 4 ]
Type of returned result is : < class 'numpy.ndarray' >
|
を出力します。
import numpy as np
#passing start=5 and stop=8 to arange() res = np.arange( 5 , 8 )
#printing the result print ( "The resultant sequence with no step :" ,res)
#analysing the type of the result print ( "Type of returned result is:" , type (res))
|
ここで
- numpy` モジュールを np としてインポートしています。
- その後、パラメータは’5’のみで、シーケンスを生成して
res
に格納することを試みます。 - このとき、プログラムは渡された値を停止点または終点と見なします。そして、値
[0 1 2 3 4]
を持つ配列を作成します。 - 再度、結果のtype()がndarrayであることを確認します。
この記事もチェック:Numpyのブール配列の作成、演算、インデックス等を解説する
2. Numpyのarange()をstepなしで使う場合
Pythonのarange()`メソッドにstepパラメータが渡されない場合、デフォルトでは値1が指定されたものとみなされます。
例を見てみましょう。
The resultant sequence with no step : [ 5 6 7 ]
Type of returned result is : < class 'numpy.ndarray' >
|
出力してみましょう。
import numpy as np
#passing start=-10, stop=-1 and step=3 to arange() res = np.arange( - 10 , - 1 , 3 )
#printing the result print ( "The resultant sequence with negative start and stop :" ,res)
#analysing the type of the result print ( "Type of returned result is:" , type (res))
|
ここで、stepパラメータを渡していないにもかかわらず、作成された配列は[5 6 7]の値で構成されていることがよくわかります。
つまり、この場合、デフォルトの値である1を使って、対応する出力を生成している。
3. 負のパラメータを持つarange()の使用
では、arange()メソッドに渡された値が負の値だった場合はどうでしょうか?普通に動作します。
始点と終点が負の値である場合、このメソッドは正の値の場合と同じ方法でシーケンスを生成します。
これは、開始点から始まり、指定された正のステップで増分して処理を継続します。
注意:もし指定されたステップが負の値であった場合、唯一の違いはインクリメントの部分となる。
この場合、ステップが追加されますが、ステップの値が負であるため、最終的に生成される配列は降順になる予定です。
負のスタートとストップの値を渡す例を見てみましょう。
The resultant sequence with negative start and stop : [ - 10 - 7 - 4 ]
Type of returned result is : < class 'numpy.ndarray' >
|
結果を出力すると、以下の様になります。
import numpy as np
#to print all even numbers from 2 to nth even number, where n is user input #user input n = int ( input ( "Enter the last even number: " ))
print ( "The sequence of even numbers :" )
for i in np.arange( 2 ,n + 2 , 2 ): #here stop=n+2 so that the nth even number is too printed
print (i, end = " " )
|
上述したように、arange()` メソッドは要素 [-10 -7 -4] からなる配列を生成します。
これは、与えられた start と stop パラメータが (-10) と (-1) で、step= 3 であるからです。
4. Numpyのarange()とPythonのループの併用
以下の例では、Pythonのネイティブなforループにarange()メソッドを組み込んでいます。
結果は以下の通りです。
上記のコードでは
- arange()
メソッドは、組み込みの
range()` メソッドと同じ出力を生成します。ここでは、2からユーザが指定した最後の1つまでのすべての偶数を表示しようとします。 -
np.arange(2,n+2,2)
は 2 から n までのすべての数字を含むシーケンスを出力します。 - 先に見たように、arange()メソッドは停止値や終了値を含んでいません。そこで、この状況を打開し、ユーザが提供した最後の偶数個の値も表示するために、停止パラメータを (n+2) と考え、step=2 としています。
Pythonのネイティブなforループで arange()
メソッドを使用したにもかかわらず、これはコードの実行速度と性能に影響を及ぼします。
同様に遅くなります。
この記事もチェック:Pythonの配列をNumpyやforループを使って初期化する3つの方法
Numpyのarange()とPythonのrange()の比較
NumPyモジュールは、本当に役に立つ、そしてより重要なことに、より高速なメソッドを提供してくれます。
線形配列の生成の場合、Numpyの arange()
メソッドは、どちらも同じタスクを実行するにもかかわらず、性能と速度の点で組み込みの range()
メソッドを凌駕します。
これは、numpyモジュールがベクトル化されたコードを使用しているためです。
この記事もチェック:Numpyとvstackメソッドを使って1次元配列を多次元配列に結合する方法
まとめ
NumPyモジュールの arange()
メソッドについて、その仕組みと、Pythonのネイティブメソッド range()
よりも高速で優れたメソッドであることを学びました。
この記事もチェック:PythonのNumPyでよく使うメソッドを4つに分けてまとめてみた