エンジニアリングとお金の話

都内で働くエンジニアの日記です。

【技術】numpyの使い方が分かってきた

【SPONSORED LINK】

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理の4章:『numpyの基本』を読み終えたのでそのメモ。

numpyとは、科学技術計算やデータ分析の為のpythonパッケージである。多次元配列を容易に作成でき、ベクトル演算と言われる高速な演算を行う事が出来る。

  • 多次元配列の作り方
import numpy

arr=numpy.array([[0,1,2],[3,4,5]])

ちなみに、この様に書き換える事も出来る。

import numpy

arr=numpy.arange(6).reshape(2,3)

作成される配列はこんな感じ。

array([[0, 1, 2],
       [3, 4, 5]])

numpyから作成される多次元配列はndarrayと呼ばれる。

  • ベクトル演算

ベクトル演算とは、演算命令が配列の全てに適用される事である。ベクトル演算を使用する事により、要素ごとの処理の為にループを各必要が無くなる。

配列の全ての要素に2を掛ける

import numpy

arr=numpy.arange(6).reshape(2,3)

arr*2

結果はこの様になる

array([[ 0,  2,  4],
       [ 6,  8, 10]])

ちなみに、通常の2次元配列に2を掛けると以下の様になる。

arr=[[0,1,2],[3,4,5]]

arr*2
[[0, 1, 2], [3, 4, 5], [0, 1, 2], [3, 4, 5]]

ndarrayはブールインデクッス参照と言われる参照が可能である。

import numpy

arr=numpy.arange(6).reshape(2,3)

index=numpy.array([[True,False,True],[False,True,False]])

arr[index]
array([0, 2, 4])

ベクトル演算を活用すると以下の様に書く事も出来る。

import numpy

arr=numpy.arange(6).reshape(2,3)

arr[arr % 2 == 0]
array([0, 2, 4])

特定の条件時に値の置き換えを行いたい場合は、whereを使用する。

import numpy

arr=numpy.arange(6).reshape(2,3)

numpy.where(arr % 2,"True","False")
array([['False', 'Treu', 'False'],
       ['Treu', 'False', 'Treu']],
      dtype='|S5')

最後にランダムに1000歩進んだ場合の処理をnumpyを使用して書くと以下のとおり。for文を書かずに繰り返し処理が行えるのは便利。

import numpy

nstep=1000

#0か1の配列を作成
draws=numpy.random.randint(0,2,size=nstep)

#0より大きい場合は1、小さい場合は-1
step=numpy.where(draws > 0,1,-1)

#累積和を算出
walk= step.cumsum()

ベクトル演算は配列を扱う上で強力な武器になると思う。numpyは他にも色々な算術演算も準備されているので活用していきたい。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理