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