【Python入門】numpyで計算をしてみよう

numpyはPythonで学術計算をするためのライブラリです。

numpyはPythonの機械学習でも頻繁に使われるライブラリですので知っておいて損はしません。

この記事では、

・numpyとは
・ndarrayの使い方

というnumpyの基本的な内容から、

・行列の計算
・numpyの基本的な関数

など、より実践的な内容に関しても分かりやすく解説していきます。

※ この記事のコードはPython 3.7で動作確認しました。

numpyとは

numpyは、Pythonで学術計算をするためのライブラリです。

基本的な計算はPythonだけでも出来ますが、numpyを使うとその計算が高速になったり、より楽になったりします。

Pythonは機械学習ととても関連が強い言語ですが、その中でもnumpyが使われることはとても多いです。

これから機械学習を始める方も、ただnumpyについて知りたいという方も、ぜひnumpyを使った計算方法を学んでおきましょう!

numpyの配列(ndarray)の使い方

numpyにはndarrayというnumpyで使われる配列があります。

ndarrayは多次元配列を扱うためのクラスで、1次元であればベクトル、2次元であれば行列、3次元以上であればテンソルを扱うことが出来ます。

こちらのサンプルコードを見てみましょう。

import numpy as np

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

numpyはライブラリですのでimportをする必要があります。

numpyをnpという名前でimportするのが慣例になっているので特別な理由が無ければこのようにimportをしましょう。

またこれ以降のサンプルコードではこの1文は省略して書きます。

実行結果

[1, 2, 3]

このサンプルコードではnp.array関数に配列を渡し、1次元のベクトルを作りました。

2次元の行列を作るためにはこのように配列が要素になっている配列をカンマで区切ります。

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

実行結果

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

基本的な行列の作り方はこのようになります。

また、この章で解説したimportの方法について、もう少し詳しく知りたい方はこちらの記事をご覧ください。

はじめてのPython!パッケージをimportする方法をやさしく解説!
更新日 : 2020年5月21日

行列の計算

ここからは、先程作った行列を計算してみましょう。

機械学習でも、行列の計算は必須となる技術になります。

今回はこちらのサンプルコード(行列)を例に計算をしてみます。

vecx = np.array([[1,2,3],[4,5,6]])
vecy = np.array([[4,5,6],[7,8,9]])
vecz = np.array([[1,2,3],[7,8,9],[4,5,6]])

行列の足し算や引き算はとても直感的に実行することが出来ます。

print(vecx + vecy)
print(vecx - vecy)

実行結果

array([[ 5,  7,  9],
       [11, 13, 15]])
array([[-3, -3, -3],
       [-3, -3, -3]])

行列の掛け算は、np.dot関数で実行することが出来ます。

res = np.dot(vecx, vecz)
print(res)

実行結果

array([[27, 33, 39],
       [63, 78, 93]])

とても簡単に計算することが出来ましたね。

numpyの基本的な関数

最後に、numpyで使われる基本的な関数について見ていきましょう。

四則計算(np.add、np.subtract、np.multiply、np.divide)

まずは基本的な四則計算について見てみましょう。

こちらのサンプルコードを見てみましょう。

res1 = np.add(10,100)
res2 = np.subtract(10,100)
res3 = np.multiply(10,100)
res4 = np.divide(100,10)

print(
    res1,
    res2,
    res3,
    res4,
)

実行結果

110 -90 1000 10.0

とても簡単ですね。

これらの四則計算のうち、np.add関数np.subtract関数は行列に対しても適用できます。

累乗、平方根(np.power、np.sqrt)

つぎは累乗、平方根について見てみましょう。

こちらのサンプルコードをご覧ください。

res1 = np.power(2,5)
res2 = np.sqrt(2)
res3 = np.sqrt(4)

print(
    res1,
    res2,
    res3,
)

実行結果

32 1.4142135623730951 2.0

順番に、2の5乗、2の平方根、4の平方根が表示されましたね。

三角関数(np.sin、np.cos、np.tan)

numpyではもちろん、三角関数も使うことが出来ます。

こちらのサンプルコードを見てみましょう。

res1 = np.sin(0)
res2 = np.cos(0)
res3 = np.tan(0)

print(
    res1,
    res2,
    res3,
)

実行結果

0.0 1.0 0.0

cosでは、cos0の値は1なので、しっかりと表示されていますね。

ソート関数(np.sort)

numpyではソート関数を使うことも出来ます。

ソートとは、順番がバラバラなものをある順番に沿って並び替えることです。

こちらのサンプルコードを見てみましょう。

x = np.random.randint(0, 10, size=10)
print(x)
print(np.sort(x))

実行結果

[6 2 2 9 7 1 5 8 5 4]
[1 2 2 4 5 5 6 7 8 9]

このように、np.sort関数を使うと昇順に並び替えることが出来ます。

これを逆順の降順に並び替えるには、スライスというPythonの機能を使いましょう。

x = np.random.randint(0, 10, size=10)
print(x)
print(np.sort(x)[::-1])

実行結果

[6 2 2 9 7 1 5 8 5 4]
[9 8 7 6 5 5 4 2 2 1]

このスライスは、リストなどのシーケンスの要素について、部分的に操作を行うことができる命令です。

基本的には、

x[始まり: 終わり: スライスのステップ]

で、順番を並び替えたり取得する位置を変えたりすることが出来ます。

今回の「[::-1]」では、スライスのステップを-1に指定したことで、逆順(降順)に取得することが出来ました。

まとめ

この記事ではnumpyについて、基礎的な部分を中心に紹介してきました。

numpyは一つの記事では書ききれないほど、たくさんの便利な機能があります。

この記事では導入部分の紹介が主でしたが、実際に使いながら使いたい機能を検索してみると良いかもしれません。

numpyを使って学術計算をより便利に実行してみましょう!

なお、今Pythonを学習している方は以下の記事もどうぞ。

はじめてPythonを使う方でもわかりやすいように、Pythonでできることやその学習法などを中心にまとめています。

復習にも使えると思いますので、ぜひ一度ご覧になってみてくださいね。

Python 入門完全攻略ガイド

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

cta_under_bnr

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

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

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

cta_under_bnr

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

詳細はこちら

書いた人

侍テック編集部

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。
サービスページはこちら
ツイッターはこちら
フェイスブックはこちら

おすすめコンテンツ

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

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