【入門者向け】NumPy③(NumPyの数学関数とIndexの指定)|Python入門 #13

f:id:lib-arts:20190930230648p:plain

 

#1ではPythonを用いたFizzBuzzのコーディングについてまとめました。

入門者の方に読んでみていただいたところ、少し難しかったようなので、#2〜#10ではPythonの基本文法をそれぞれもう少し丁寧に解説を行ないました。

【入門者向け】Pythonの基礎文法① 四則演算・文字列|Python入門 #2 - lib-arts’s diary

【入門者向け】Pythonの基礎文法② リスト・タプル・辞書|Python入門 #3 - lib-arts’s diary

【入門者向け】Pythonの基礎文法③ 制御構文(if、for)|Python入門 #4 - lib-arts’s diary

【入門者向け】Pythonの関数の実装|Python入門 #6 - lib-arts’s diary

【入門者向け】クラスの概要とPythonにおける実装|Python入門 #7 - lib-arts’s diary

【入門者向け】Pythonにおけるクラスの継承とオブジェクト指向|Python入門 #8 - lib-arts’s diary

#11からはPythonを使用する際によく用いるライブラリを見ていければということで、まずはNumPyについて下記のチュートリアルをベースに進めています。

Quickstart tutorial — NumPy v1.17 Manual

#11ではNumPyの概要と簡単な動作確認について、#12では配列の生成と簡単な演算について取扱いました。

【入門者向け】NumPy①(概要と最低限知っておくと便利な機能)|Python入門 #11 - lib-arts’s diary

【入門者向け】NumPy②(配列の生成とNumPyの簡単な演算)|Python入門 #12 - lib-arts’s diary

#13ではNumPyの数学関数とIndexの指定について確認を行います。
以下目次になります。
1. NumPyの数学関数
2. NumPyにおけるIndexの指定
3. まとめ

 

1. NumPyの数学関数
1節ではNumPyの数学関数について取り扱います。

f:id:lib-arts:20191003154649p:plain

Quickstart tutorial — NumPy v1.17 Manual

まずは上記を確認していきます。下記に実装を元に軽く書き直しました。

import numpy as np

B = np.arange(3)

print(B)
print(np.exp(B))
print(np.sqrt(B))

上記を実行すると下記のようになります。

f:id:lib-arts:20191003154724p:plain

#12で取り扱ったnp.arangeで生成した配列[0,1,2]を入力として数学演算を行なっています。それぞれnp.expは底を自然対数のeとする指数関数e^xを、np.sqrtは\sqrt{x}を演算として施しています。NumPy関連の数学関数は引数として値だけでなく配列も取ることができることに注意です。
また、下記も実行してみましょう。

C = np.array([2., -1., 4.])
print(np.add(B, C))

実行結果は下記のようになります。

f:id:lib-arts:20191003154749p:plain

こちらではnp.addを用いて配列Bと配列Cの要素ごとの和を計算しています。
チュートリアルの記載では上記までなのですが、もう少しいくつか関数を見る方がわかりやすいと思うので、以下追加で基本的な関数について見ておきます。

print(np.sum(B))
print(np.mean(B))
print(np.sin(B))
print(np.cos(B))
print(np.log(B+1))
print(np.max(B))
print(np.argmax(B))
print(np.max(C))
print(np.argmax(C))

実行結果は下記のようになります。

f:id:lib-arts:20191003155608p:plain

それぞれ関数について見ていきます。np.sumは配列の合計、np.meanは配列の平均、np.sinはsin関数、np.cosはcos関数、np.logは対数関数を表しています。np.logの引数をB+1としているのは対数関数の定義域がx>0のため、入力として0より大きい値を設定する必要があるためです。また、np.max関数は一番大きな要素を抽出する関数、np.argmaxは一番大きな要素のIndex(配列の要素の位置)を返す関数です。

大体の基本的な数学関数の実装について確認できたので1節はここまでとします。


2. NumPyにおけるIndexの指定
2節ではNumPyにおけるIndexの指定について取り扱っていきます。

Quickstart tutorial — NumPy v1.17 Manual

上記を参考に話を進めていきます。まずは下記を実行してみましょう。

a = np.arange(10)**3

print(a)
print(a[2])
print(a[2:5])

実行結果は下記のようになります。

f:id:lib-arts:20191003160442p:plain

aはnp.arangeを用いてx^3においてxに0~9の整数を入力した値となっています。ここで、a[2]は左から3番目の値(始まりが0のため)を取り出すので8を取り出しています。また、a[2:5]は左から3番目の値から5番目の値を取り出しています。a[2:5]で0からインデックスが始まるため、6番目まで取り出すのが正しいのではとも思われるのですが、Pythonにはスライスという考え方があり、このような形となります。この辺はこういう風に定義したからこうなったという話ではあるので、慣れてしまうのが良いと思います。(詳しく知りたい方はスライスについて調べてみてください)
チュートリアル記載のその他の機能については若干マニアックとも思われるので、気になった場合に詳細を確認する方が良いのではということでここでは割愛します。

最低限知っておくとよいIndex指定については触れられたので2節はここまでとします。


3. まとめ
#13ではNumPyの数学関数の確認とIndexの指定についての確認を行いました。
ここまででNumPyについて必ず知っておきたい大体のトピックはまとめられたと思いますので、#14以降は機械学習においてよく用いられるライブラリである、scikit-learnについてまとめていきます。