ゆる~くだらだら

日常の思ったことをてきと~に書くブログ

【超初心者向け】PythonでNumpyのインストールと基本的な使い方

f:id:hiropones:20190822150622j:plain



はい、ど〜も〜。



みなさんは、機械学習という言葉を聞いたことがあるだろうか?最近話題のあれである。今後はますますAI産業がくるぅ〜!と言われてるんで、勉強を始めてる(これから始める)人も多いと思われる。


その中の一人であるアタイが、勉強記録として、numpyの基本的な使い方を書いていきます。で、記事ではIn [1]や Out[1]を>>>で表すんでご了承くだぱい。



・Anacondaのインストール

numpyを使うには、まずanacondaをインストールします。しなくても使う方法はありますが、こっちのが何かと便利なんでおすすめです。

https://www.anaconda.com/distribution/

・numpyを使う

ipython

をターミナルで打ち込みます。

で、以下のコマンドでnumpyを立ち上げます。

import numpy as np

・配列の表示

>>>a = np.array([1, 2, 3])
>>>a
array([1, 2, 3])

これで配列が表示できました。


shapeを使うと、要素の数が確認できます。

>>>a.shape
(3,)
>>>a[0]
1

上のようにすると、(取り出したい要素の順番-1)番目を取り出せます。

・行列の基本

>>>b = np.array([[1, 2, 3],[4, 5, 6]])
>>>b
array([[1, 2, 3],
            [4, 5, 6]])

>>>b.shape
(2, 3)   ←2行、3列と確認できます。

>>>b[0, 1]  ←1行目、2列目の要素を取り出します。
2


>>>b[:1]  ←2行目までの要素を取り出します。
array([[1, 2, 3]]) 

・その他覚えておきたいコマンド
np.zeros( )で?行、?列の0の行列を作れます。onesは1バージョンです。

>>>np.zeros((2, 2))
array([[0., 0.],
            [0., 0.]])

>>>np.ones((3, 3))
array([[1., 1., 1.].
           [1., 1., 1.],
           [1., 1., 1.]])

>>>np.full((2,3), 4)
array([[4, 4, 4],
            [4, 4, 4]])

上のnp.fullは4を2行、3列で作るという意味になります。


・行列の計算方法

まずは行列の計算をおさらいします。

[a b] * [e f ] = [ae+bg  af+bh]
[c d]    [g h]    [ce+dg  cf+dh]
>>>a = np.array([[1,2],[3,4]])  
>>>b= np.array([[6,7],[8,9]])
>>>a * b
array([[6, 14],
            [24, 36]])

そのまま掛けると、行列の計算になってないことがわかります。なんで、こうします。

>>>np.dot(a, b)
>>>array([[22, 25],
                  [35, 52]])

ちなみに、np.dot(a, b)はa.dot(b)と同じ意味で使えます。

・リストを配列に変換

>>>a = [[1,2],[3,4]]
>>>type(a)
list
>>>a= np.array(a)
>>>a
array([[1,2],
           [3,4]])
>>>type(a)
numpy.ndarray

>>>a= a.tolist( )
>>>a
[[1,2],[3,4]]
>>>type(a)
list

np.array( )とすると配列になり、?.tolist( )とするとリストになります。

・乱数の使い方

np.random.rand( )で一様乱数(0〜1)が生成されます。

>>>np.random.rand(10)
array([0.81622475, 0.27407375, 0.43170418, 0.94002982, 0.81764938,
       0.33611195, 0.17541045, 0.37283205, 0.00568851, 0.25242635])


np.random.randon( )で標準正規分布の乱数を生成します。

>>>randn1000=np.random.randn(1000, 1000)
>>>randn1000.mean( )
0.0001627389273

標準正規分布の平均値は0に近くなります。

randn1000.std( )
0.99999234374678

標準偏差は1に近くなります。


np.random.randint( )は整数の乱数を生成します。
例えば、np.random.randint(10)は0〜9の整数の乱数になります。

np.random.randint(10)
3

seedを固定すると、乱数を固定することができます。

>>>np.random.seed(100)
>>>np.random.randn( )
-1.7497654730546974
>>>np.random.randn()
0.3238498479836637
(もう一度固定した乱数を出したい場合)
>>>np.random.seed(100)
>>>np.random.randn( )
-1.7497654730546974

・逆行列

np.linalg.inv( )で逆行列を表示できます。

>>>a = np.array([[1,2],[3,4]])
>>>a
array([[1,2],
           [3,4]])

>>>b = np.linalg.inv(a)
array([[4,-2],
           [-3.1]])
>>>np.dot( a * b )
array([[1., 0.].
           [0., 1.]])

・転置行列

>>>x = np.array([[1,2],[3,4],[5,6]])
>>>x
array([[1,  2] ,
            [3 ,4] ,
            [5, 6]])
>>>x.T(xの転置行列を表示)
array([[1 3 5],
           [2 4 6]])

・対角の成分を表示

np.diagで対角の成分を出せます。

>>>a = np.array([[1,0,0],[0,1,0],[0,0,1]])
>>>a
array([[1,0,0],
           [0,1,0],
           [0,0,1]])
>>>np.diag(a)
array([1,1,1])

・sin, cos, tanの使い方

>>>np.tan(45)
1.619・・(1じゃないのはラジアンで表示されてるから)
>>>rd=np.radians(45)
>>>rd
0.78・・・・(45度をラジアンに変換)
>>>np.tan(rad)
0.9999999 (度に変換されました)
>>>rd=np.radians(90)
>>>rd
1.5
>>>np.sin(90)
1.0
|

・指数関数と対数関数

np.exp( )で指数関数を計算します。

>>>a=([1,2,3])
>>>np.exp(a)
array([ 2.71828183,  7.3890561 , 20.08553692])

対数関数はnp.log( )で計算します。

>>>np.log(a)
array([0.        , 0.69314718, 1.09861229])

np.rint( )は小数点を四捨五入して整数にします。

>>>a=np.random.randn(5)
>>>a
array([ 0.3426804 ,  1.1530358 , -0.25243604,  0.98132079,  0.51421884])
>>>np.rint(a)
array([ 0.,  1., -0.,  1.,  1.])

signを使うと「−1、0、1」に分けられます。

>>>a=np.array([-6, 4, -3, 0, 3, 1, 5, -5])
>>>a
array([-6,  4, -3,  0,  3,  1,  5, -5])
>>>np.sign(a)
 array([-1,  1, -1,  0,  1,  1,  1, -1])

・小数部分と整数を分けて表示

np.modf( )を使います。

>>a=np.random.randn(5)
>>a
array([ 0.22117967, -1.07004333, -0.18949583,  0.25500144, -0.45802699])
>>np.modf(a)
(array([ 0.22117967, -0.07004333, -0.18949583,  0.25500144, -0.45802699]),
 array([ 0., -1., -0.,  0., -0.]))