ハードウェア技術者のスキルアップ日誌

某家電メーカーの技術者がスキルアップのために勉強したことを記録するブログです

Aidemy-Numpy入門

前回に引き続き、Aidemyでディープラーニングの勉強をしています。
下準備として前回はPython入門をやりましたが、今回はNumpyをやりました。

aidemy.net

 

Python入門はすべて無料で受けられましたが、Numpyは最初のいくつかのみ無料で残りは有料。このため、目次のみ参照して、中身はインターネットで調査しました。

勉強した内容をまとめていきます。

----------------------------------------

●numpyのimport
 import numpy
  import numpy as npとするとnumpyをnpという名前で読み込む
  Numpyを使用するにはnp.モジュール名と表記

 

●1次元配列(ベクトル)
  np.array(list型) 例:np.array([1,2,3])
  ベクトル計算は単に変数を加減すればよい

x=np.array([1,2,3])
y=np.array([4,5,6])
print(x + y)
>>[5 7 9]

  要素の参照はlist型と同じ
  スライスも使用可能([0:2]など)

print(x[0])
>>1


●np.arrayで作った変数はndarray型
  変数をコピーするには b=aではなく
  b = a.copy()とする必要あり
  b=aとするとaの値を書き換えたときにその変更がbにも反映される

 

●ブールインデックス参照
  リストの中の各インデックスを取り出すか取り出さないかを
  True/Falseで指定する

ndarr1 = np.array([0, 10, 20, 30, 40, 50])
print(ndarr1[np.array([False, True, False, False, False, True])])
# 出力結果
# [10 50] #Trueのインデックスのみ取り出す

  この方法を使えば配列の中のデータから条件に合うものだけを簡単に抽出できる

ndarr1[ndarr1 > 20]
# [30 40 50]  #20より大きい要素だけ抽出

 

●ユニバーサル関数
  NumPyの多次元配列(numpy.ndarray)で、要素ごとに演算を行い、
       結果も同一サイズになる関数のこと
  加減乗除、指数対数、三角関数など
  具体的には以下のサイト参照

www.python.ambitious-engineer.com

 

●集合関数
  重複削除  np.unique()
       和集合(OR) np.union1d()
       積集合(AND) np.intersect1d()
       差集合 setdiff1d()
  そのほかにも関数あり
  以下のサイトなど参照

pppurple.hatenablog.com

  
●乱数
  一様乱数、ガウス分布など乱数の発生のさせ方が複数ある
  以下のサイト参照

qiita.com


●2次元配列(行列)

x = np.array([[1,2,3],[4,5,6]])
print(x)
#出力
#[[1 2 3]
# [4 5 6]]

       行列のサイズはndarray型の変数名.shapeで取り出せる

x.shape
#出力
#(2,3)

  要素の参照は行列の要素をリストの形で指定
  インデックスは0から始まることに注意

x[1,2]    #2行3列目の要素
#出力
#6

       多次元配列の次元数(shapeの要素の数)は以下で求まる
          x.ndim

 

●axis
  多次元配列の軸を表す
       3x2の2次元配列の場合
  axis=0はshapeの先の数(3), axis=1はshapeの後の数(2)を示す

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

  

  同様に2x3x2の配列の場合、
  axis=0は2, axis=1は3, axis=2は2を示す

f:id:masashi_k:20190130225017j:plainf:id:masashi_k:20190130225035j:plain

  numpyにはaxisを引数に取る関数がある
  例:x.sum(axis=0)
               axisの方向に要素を足し合わせる

 

●ファンシーインデックス参照
  二次元配列の要素を指定する際にインデックスのリストを使って参照
  通常はa[0][1]のように指定するが、a0,1のようにリストを記載
  a0,1はa[0], a[1]を取り出すこと意味

 

●行列のサイズ変更

a = np.arange(10)
#[0 1 2 3 4 5 6 7 8 9]     0から9までの数字を順に並べた行列を作る
a.reshape(2,5)
#([0, 1, 2, 3, 4],
#[5, 6, 7, 8, 9]])

 

●転置行列
  行と列を入れ替えた行列

x = np.array([[1,2,3],[4,5,6]])
tx = x.T
# ([[1,4],
#[2,5],
#[3,6]])

 

●ソート
        axisの方向にデータを昇順に並べる
      np.sort(x, axis)
  降順に並べたい場合は[::-1]を使う 

np.sort(x, axis)[:, ::-1]

 

●行列計算
       四則演算 +, -, *, /は対応する要素ごとに行われる
  スカラー倍はすべての要素に作用
  行列の積 np.dot(a,b)

 

●統計関数
  例:sum 和
    mean 平均
    var 分散
  axisを指定すればその軸の方向に計算を行う
  そのほかにも多数関数あり
  以下のサイト参照

python-remrin.hatenadiary.jp


●ブロードキャスト
  要素数が足りない場合には自動で行・列を拡張してくれる機能
  ■ブロードキャストの規則
            後ろから順に次元を比べ、対応する次元は同じか1でなくてはならない
            ※(2, 3)対(1, 3)の場合にはまず3と3が比べられて、次に2と1が比べられる。
    具体的には以下のサイトを参照

qiita.com