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

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

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

入門者の方に読んでみていただいたところ、少し難しかったようなので、#2以降では#1で触れた基本文法をそれぞれもう少し丁寧に解説を行ないました。
#2ではPythonにおける四則演算・文字列について、#3ではリスト・タプル・辞書について、#4ではPythonの制御構文について、#5ではPythonの入出力に関して、#6ではPythonの関数の実装について、#7ではPythonにおけるクラスの実装について、#8ではPythonにおけるクラスの継承とオブジェクト指向について、#9、#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入門 #5 - 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

【入門者向け】Pythonにおけるモジュールの実装①|Python入門 #9 - lib-arts’s diary

【入門者向け】Pythonにおけるモジュールの実装②|Python入門 #10 - lib-arts’s diary

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

Quickstart tutorial — NumPy v1.17 Manual

以下目次になります。
1. NumPyとは
2. 最低限知っておきたい機能
3. まとめ


1. NumPyとは
1節ではNumPyの概要についてまとめていきます。まずはWikipediaを確認していきます。

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

NumPy - Wikipedia

上記によるとNumPyは『数値計算を効率的に行うためのPython拡張モジュール』とされています。また、ベクトルや行列を含む多次元配列のサポートをPythonに加え、それらの処理のための数学関数を実装したライブラリを提供するとあります。
元々、Pythonにも配列の機能としては#3でご紹介したようにリスト、タプル、辞書などがありこれらを用いて多次元配列を実装することはできるのですが、より大規模な処理を行う際はこれらよりパフォーマンス的に優れたNumPyを用いる方が良いと考えておくと良いと思います。

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

次に、NumPyが通常のPythonに比べて高速な理由ですが、Pythonが動的型付け言語であることにより、CやJavaなどの静的型付け言語と比べた際に数値計算にあたって時間がかかるとされています。これに対し、NumPyはPythonに対して型付きの多次元配列オブジェクトのnumpy.ndarrayとその配列に対する多数の演算関数や操作関数を提供することで速度面での問題を解決しようとしています。NumPyの内部自体はC言語によって実装されているため、非常に高速に動作すると考えておくと良いです。
さらに、NumPyはBLAS APIを実装した行列演算ライブラリを利用して線形代数演算を行うため、C言語で単純に書いた線形代数演算よりも高速に動作しうるともされています。

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

また、MATLABとの比較としては、Python+NumPyが近い機能性を提供するため、NumPyをMATLABのフリーの代替物として使用するケースもあるとされています。
両者の大きな違いとしては、MATLABのライセンスが有償で高価なのに対し、NumPyはオープンソースかつフリーであることです。むしろ近年Python関連のライブラリの発展が著しいため、フリーのPythonの方が高機能になってきている可能性があります。特に深層学習系のライブラリとして多く用いられているTensorFlow、Keras、PyTorchなどはPythonからのAPIが充実しているため、そういう意味でもPythonが非常に人気になってきています。

大体の概要についてはつかめたと思うので、1節はここまでとします。

 

2. 最低限知っておきたい機能

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

Quickstart tutorial — NumPy v1.17 Manual

2節ではとにかくNumPyを使って見て慣れようということで、上記の"An example"の内容を元に最低限知っておきたい機能についてまとめておきます。
まずは下記を実行してみましょう。

import numpy as np

a = np.arange(15).reshape(3, 5)
print(a)

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

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

上記ではnp.arangeを用いて0~14までの整数を15個並べた配列の生成を行い、それをreshapeメソッドを用いて3行5列の配列に整形しています。また、1行目の"import numpy as np"は#9や#10で触れたモジュールのimportと考え方は同じです。NumPyのモジュールを読み込んで、asを用いてnpでインスタンスとしてアクセスできるようにしています。

print(type(a))
print(a.shape)
print(a.dtype)

また上記を実行することにより、NumPyの行列のサイズ(a.shape)の確認やインスタンス(オブジェクト)の実装(type(a))について確認できます。実行結果は下記のようになります。

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

簡単な配列の生成と操作について確認できたので、2節はここまでとします。


3. まとめ
#11ではNumPyの概要と簡単な動作確認について行いました。
#12ではNumPyの機能について他にも色々と確認していければと思います。