機械学習に必須!Pythonで高速に行列計算ができるNumPyに入門!

この記事ではNumPyの紹介を行います。

機械学習やAIプログラムでは、非常に膨大な計算を行います。

そんな計算を効率的に行うためのライブラリがNumPyです。

この記事では

  • NumPyとは
  • 四則演算
  • データの特徴を捉える値を計算

などの基本的な内容から

  • 内積と外積

などの応用的な内容まで解説していきます!

NumPyは機械学習プログラミングで非常に重要なライブラリです。

この記事でNumPyに入門しちゃいましょう!

NumPyとは

python_numpy

[引用:numpy.org]

高速に行列計算ができるNumPy

NumPyPythonの行列計算ライブラリです。

実はPythonは他のプログラミング言語と比べてあまり速く計算ができません

ではどうやってAIプログラミングなどの重い計算をやっているのかというと、実はこのNumPyに計算をしてもらっているんです。

NumPyはC/C++、Fortranなどの高速に動作する言語で実装されていて、Pythonから簡単に使うことができます。

このライブラリは現在の機械学習・ディープラーニングなどのAI技術のプログラムには必要不可欠なツールであり、AIプログラミングを行うために是非覚えておきたいツールです!

インストール方法

Anacondaを使ってPython環境を作ったならば、既にNumPyはインストールされています

ちなみに、Anaconda環境でNumPyを手動インストールする時は、

conda install numpy

他の方法でPython環境を作って、NumPyをインストールする時は、

pip install numpy

でインストールできます。

NumPyの使い方

numpy_10

このセクションでは、NumPyを使った簡単な行列演算にチャレンジしましょう!

まずは準備として、NumPyをimportします

NumPyは慣例としてnpというニックネームをつけますよ。

import numpy as np

a = np.arange(6)
a = a.reshape(2,3)
b = np.arange(6,12)
np.random.shuffle(b)
b = b.reshape(2,3)

このプログラムでは、aとbというサンプル行列を作ります。

★ヒント

np.arrange(x,y)
> xからy-1までの要素を持った整数(int)型のベクトルを作ります。

z.reshape(x,y)
> zをx,y行列に変形します。

np.random.shuffle(x)
> xをランダムに並び替えます。

この操作によってaとbは以下のような値を持ちます。

numpy_1

ではこれらを使って行列の計算をやってみましょう。

四則演算

演算子( + - * /など)を使った行列同士の計算は、要素同士の計算になります。

この解説でわかった人はOKです。次へ進んでください。

ストンとこなかった人は、謎の演算子★を使った例題、result=a★bを考えましょう。

この計算をしたとき、numpyは下のような動きをします。

numpy_2

要素同士の計算とはこういうことです。

わかりましたか?

わかったら次へ。ストンとこなかった人は下の例題を手で計算してみましょう!

加算(足し算)

result = a+b

# 結果
array([[ 6,  9, 11],
       [14, 11, 15]])

減算(引き算)

result = a-b

# 結果
array([[-6, -7, -7],
       [-8, -3, -5]])

乗算(掛け算)

result = a*b

# 結果
array([[ 0, 8, 18],
       [33, 28, 50]])

除算(割り算)

result = a/b

# 結果
array([[0. , 0.125 , 0.22222222],
       [0.27272727, 0.57142857, 0.5 ]])

データの特徴を捉える値

平均値、中央値、最大値、最小値を計算してみましょう。

まずはサンプルデータを作ります。

今回は標準正規分布 (平均0, 標準偏差1)から値を10個サンプリングしました。

c = np.random.randn(10)

# 結果
array([ 0.74574745, -0.25264616, 2.73971656, 0.01992425, 1.33860227,
        0.3727719 , 0.13732889, 0.47620023, 1.32571159, -0.57923272])

numpy_3

この配列を使って配列を使って計算していきましょう。

平均値

np.mean(c)

# 結果
0.6324124270974353

中央値

np.median(c)

# 結果
0.4244860647418945

最大値

np.max(c)

# 結果
2.7397165593902857

最小値

np.min(c)

# 結果
-0.5792327226017869

内積と外積

内積

内積(dot product)、機械学習でよく出てくる計算ですね。

ちょっとわからないぞ?って人は次の記事をチェック。

【数学】「内積」の意味をグラフィカルに理解すると色々見えてくる その1@kenmatsu4 --Qiita

イメージとしては下の感じ。

numpy_5

NumPyなら内積の計算も簡単!

result = np.dot(a, c[1])

# 結果
array([ 27, 111])

★ヒント

b[1] > bの0から数えて1番目の要素を取り出します。つまり[11, 7, 10]が取り出されます。

外積

外積(outer product)・・・というか直積も計算しましょう。

イメージとしては下の感じ。numpy_4百ます計算(掛け算)みたいな感じですね。

np.outer(a.reshape(6), b.reshape(6)[:4])

# 結果
array([[ 0,  0,  0,  0],
       [ 6,  8,  9, 11],
       [12, 16, 18, 22],
       [18, 24, 27, 33],
       [24, 32, 36, 44],
       [30, 40, 45, 55]])

まとめ

この記事では、Numpyの簡単な使い方を紹介しました

NumPyはPythonで非常に重要なライブラリです。

本当に様々なツールで使われていて、これを覚えるだけで世界が広がります。

もっと深いNumPyの勉強がしたい!NumPyで機械学習を実装したい!という方には侍エンジニア塾のマン・ツー・マンレッスンがオススメです。

マン・ツー・マンレッスンでNumPy、機械学習の勉強を始めてみましょう。

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。

おすすめコンテンツ

まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー