numpy .arange データ生成
numpyの.arangeでデータを生成する
0,1,2,3...とか1,3,5,7のようなデータを作る方法
start, step, dtypeは省略可能でstartを省略すると0からになる。
how to use
arange([start],stop,[step],[dtype])
start, step, dtypeは省略可能でstartを省略すると0からになる。
In [1]: import numpy as np In [2]: X = np.arange(10) In [3]: print X [0 1 2 3 4 5 6 7 8 9] In [4]: type(X) Out[4]: numpy.ndarray In [5]: X.dtype Out[5]: dtype('int32')
dtypeを省略した場合は、10のように整数で指定するとint32になり、10.のように浮動小数点で指定するとfloat64になる。
dtype=np.float32のように指定すると、ほしい型でデータが作成される。
In [15]: X = np.arange(10) In [16]: print X.dtype int32 In [17]: X = np.arange(10.) In [18]: print X.dtype float64 In [19]: X = np.arange(10.,dtype=np.float32) In [20]: print X.dtype float32
start,stop,stepを指定した時の例は下記の通り。
In [22]: X = np.arange(1,10) In [23]: print X [1 2 3 4 5 6 7 8 9] In [24]: X = np.arange(1,10,2) In [25]: print X [1 3 5 7 9] In [26]: X = np.arange(9,0,-2) In [27]: print X [9 7 5 3 1]
rangeとxrangeについて
ちなみにnumpyのarangeではなく、rangeを使うとnumpy arrayではなくlistになるので注意。
list Yをnumpy arrayにしたいときは、np.array(Y)とするとよい。
numpy arrayの変数Xにlist Yを代入してもnumpy arrayにはならない(X=Y)。
また、xrangeを使った場合は、generatorが生成される。実際の値を取得したいときは、for文で使うかlist(Z)のようにする。
In [6]: Y = range(10) In [7]: print Y [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] In [8]: type(Y) Out[8]: list In [9]: Z = xrange(10) In [10]: print Z xrange(10) In [11]: type(Z) Out[11]: xrange In [12]: list(Z) Out[12]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
rangeとxrangeの違いは、rangeが一度にlistが生成されるのに対し、xrangeは1 loopに1回ずつ値が生成される。for文の途中でloopを抜けるような処理の場合に無駄な値の生成がなくなる。生成するlistが大きい場合はメモリと時間の節約になる。
In [13]: timeit for i in range(1000000): pass 10 loops, best of 3: 36.3 ms per loop In [14]: timeit for i in xrange(1000000): pass 100 loops, best of 3: 16.4 ms per loop