データサイエンティストハトリのブログ

PythonとインテリジェントクラウドとAIが好きな学生エンジニア。データ分析、スクレイピング、就職活動などについて書いていきます。

【機械学習】Python・Numpyの基本文法と使い方を日本語でわかりやすくまとめた【チュートリアル】

f:id:hatorihatorihatorik:20180916030908p:plain


 

こんにちは、どうもハトリです!!

TwitterでプログラミングやIT関連のことについてつぶやいているのでよかったら是非フォローしてください →→(@tori_engineer)




機械学習を学んでいてPandasとNumpyっていう2つのツールをほとんどの人は使っていると思います。これらは数値計算をしたりデータ分析をする上で必ず必要になってくるライブラリです。



このPandasとNumpyですが上手にまとまっているサイトがないなーと思い作ってみることにしました!ドキュメントみても英語ばっかりだし、堅い文章で書かれているのでわかりにくいですよね。

今回は日本語でわかりやすく、Numpyの使い方について解説していきたいと思います。

Numpyとは

まずはNumpyとはどういうものなのかを確認しておきましょう。

NumPyは、プログラミング言語Pythonにおいて数値計算を効率的に行うための拡張モジュールである。効率的な数値計算を行うための型付きの多次元配列のサポートをPythonに加えるとともに、それらを操作するための大規模な高水準の数学関数ライブラリを提供する。

とあります。つまりNumpyは数値計算をプログラミングで簡単に作成することができる便利なライブラリです。行列の計算やベクトル演算などを手動で計算するのはかなり大変ですので、このような便利なツールを使って計算していくのが一般的になっています。

Numpyの基本文法と使い方

Numpyの宣言

Numpyを使うときは必ずNumpyを使うための宣言をしなければいけません。

import numpy as np

いろいろなArrayの作り方

Pythonを学んだ時に最初の方に配列という概念が出てきたと思います。Numpyでは配列の計算を行うのですが、Numpyにおける配列をArrayと言います。


・Arrayをつくる①

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

#  array([1, 2, 3])


・Arrayをつくる②(arangeメソッド)

array = np.arange(10)

# array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])


・arrayの要素を取り出す

array = np.arange(10)
array[0:6] #array([0, 1, 2, 3, 4, 5])

・arrayを行列に変換

array = np.arange(10)
array.reshape((2, 5))

# array([[0, 1, 2, 3, 4],
#        [5, 6, 7, 8, 9]])


・多次元のArrayを作る

array  = np.array([[1, 2, 3], [4, 5, 6]]) #2行3列のarrayが作成

# array([[1, 2, 3],
#        [4, 5, 6]])


・arrayの行と列を入れ替え

array.T

# 又は

array.transpose()


高次元のtransposeメソッドについてはこちらを参考に

www.torikun.com



・arrayの大きさを調べる

array.shape


・arrayの要素の型を調べる

array.dtype


・要素が全部0のarrayを作成

array = np.zeros(3) #3つの要素を持った値が0の配列を作成

# array([0., 0., 0.])


・要素が全部1のarrayを作成

array = np.ones((3, 3)) #3行3列で要素が全て1の行列を作成

# array([[1., 1., 1.],
#        [1., 1., 1.],
#        [1., 1., 1.]])


単位行列を作成

array = np.eye(3) #3行3列の単位行列を作成

#  array([[1., 0., 0.],
#        [0., 1., 0.],
#        [0., 0., 1.]])


・空の配列を作成

array = np.empty(3) #3行3列の配列を初期化


・arrayの四則演算

#長さが3のarrayを定義
array1 =  np.array([1, 2, 3])
array2 = np.array([4, 5, 6])


・array同士を四則演算
array  = array1 + array2 # array[5 7 9]
array  = array1 - array2 # array[-3 -3 -3]
array  = array1 * array2 # array[ 4 10 18]
array  = array1 / array2 # array[0.25 0.4  0.5 ]


・arrayと整数の四則演算

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

array = array + 1 # array[5.5 7.  8.5]
array = array - 1 # array[4.5 6.  7.5]
array = array * 3 # array[13.5 18.  22.5]
array = array / 2 # array[ 6.75  9.   11.25]


・arrayの累乗

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

array = array ** 2 #array([1, 4, 9])


・arrayの内積を求める

array.dot(arrray, array.T)


・その他計算のためのメソッド

# 平方根を求める
np.sqrt(array)

# eの累乗を求める
np.exp(array)

#array同士を足す
np.add(array1, array2)

#arrayの引数の最大値を取得
np.maxmum(array1, array2)

# ランダムのarrayを作る
np.random.randn(10) #長さが10の値がランダムのarrayを定義


・arrayの合計、平均、分散、標準偏差をを求める

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

#合計
array.sum() #6

#平均
array.mean() #2.0

#分散
array.std() #0.816496580927726

#標準偏差
array.var() #0.6666666666666666


・順番を入れ替え(ソート)

array = np.array([3, 1 ,2])
array.sort()  #array([1, 2, 3])


・ファイルの入出力

#npy形式で読み書き
array = np.array([1,2,3])
np.save("array", array) #npyファイルを書き込み
np.load("array.npy")  # 読み込むとarray([1, 2, 3])が返ってくる

#txt形式で読み書き
np.savetxt("array.txt", array, delimiter=",") #txtファイルを書き込み
np.loadtxt("array.txt", delimiter=",") #読み込むとarray([1., 2., 3.])が返ってくる


・値がUniqueかどうか判定

array = [1, 2, 3, 4, 1, 2]
np.unique(array) #array([1, 2, 3, 4])


・第2引数が第1引数を含んでいるかどうか判定

array = [1, 2, 3, 4]
np.in1d([1, 5, 6], array)  #array([ True, False, False])

・配列の一部だけを取り出す(slice機能)

#全部取得
array[:]  #[1, 2, 3, 4, 5]

#3番目までを取得
array[:3]  #[1, 2, 3]

#2行2列
array = np.arange(9).reshape(3, 3)
array[:2, :3]
#  array([[0, 1, 2],
#        [3, 4, 5]])

Numpyの基本的な機能は以上になります。辞書的な感じで使っていただけたらなと思います!