ShimakazeSoft Tech

Python好きの新卒WEBエンジニアが技術記事を執筆するブログ。主にWEB系や機械学習系のことを掲載。

Pythonで機械学習に軽く振れる その1(NumPyの使い方・導入編)

f:id:shimamili:20180330022959j:plain

まずは機械学習をやってみる中で、よく使うライブラリがNumPyです。

NumPyはPython数値計算を効率的に行うためのモジュールです。主にベクトル演算などを行う際などに使われます。内部はC言語で書かれているため、多次元配列などを扱った計算には非常に高速です。

Numpyの導入

pip install numpy

pipでnumpyをインストールします。

numpyをインストール後、全てのコードでnumpyを呼び出せるようにimportしておきます。

import numpy as np

Numpyで配列を作成して操作

numpyにはndarrayという配列があり、ndarrayは多次元配列を扱うためのnumpyのオブジェクトです。

1,2,3という要素を持った配列(ベクトル)を作成する場合、以下のようにします。

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

# [1, 2, 3]

2次元の行列を作る際は、配列を要素として以下のようにカンマで区切ります。

matrix = np.array([[1,2,3],[4,5,6]])
print(matrix)

# [[1 2 3]
#  [4 5 6]]

numpyの配列であるnumpy.ndarrayはPython自体が元々持つリスト、タプル、セット、辞書(ディクショナリ)などの配列類よりも高速に動作する上、便利な関数や属性が多く用意されています。

配列の各次元の要素数を知りたい場合

ndarrayの便利な機能の一つとしてshapeメソッドがあります。ndarray.shapeは各次元の要素数を知りたい場合に使用します。

以下の場合は要素数が3つの3列のデーターであることがわかります。

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

# (3,)

以下の場合は要素数が2行3列のデーターであることがわかります。

matrix = np.array([[1,2,3],[4,5,6]])
print(matrix.shape)

# (2, 3)

基本的な演算

それでは実際にNumpyを使って基本的な演算処理のコードをいくつか書いてみましよう。

加算処理

numpyの配列を使って、足し算をやってみます。
以下は2次元配列[[1,2,3],[2,3,4]]と[[3,4,5],[4,5,6]]を足し合わせた例です。
ndarray配列のオブジェクト同士を足しあわせてもできますが、numpy独自の足し算用のメソッドとしてnp.addというメソッドが既にあります。

# 加算
arr1 = np.array([[1,2,3],[2,3,4]])
arr2 = np.array([[3,4,5],[4,5,6]])

arr = arr1 + arr2
print(arr)
# [[ 4  6  8]
#  [ 6  8 10]]

# 上記と以下の処理は全く同じ
arr = np.add(arr1,arr2)
print(arr)
# [[ 4  6  8]
#  [ 6  8 10]]
[ [1, 2, 3]
  [2, 3, 4] ]

[ [3, 4, 5]
  [4, 5, 6] ]

こちらの配列、つまり行列とも言いますが、これら二つの配列を足しあわせた結果が以下です。

[ [ 4, 6, 8]
  [ 6, 8, 10] ]


今回はNumpyの扱い方について軽く解説しました。
機械学習自体はNumpyを必ずしも使わなきゃいけないわけではありませんが、Pythonであらゆる数値計算処理をやる上では、Numpyはほぼ必須となっています。次回からNumpyについて少し深く触れていきます。