paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

機械学習でも定番のPythonライブラリ「NumPy」の初心者向け使い方チュートリアル

f:id:paiza:20170124153139p:plain
秋山です。

私は主にPythonを使って開発をしているので、以前Pythonの便利なライブラリやフレームワークを紹介する記事を書いたのですが(後でリンク貼りますね)、今回はその記事でも紹介したNumPy(なむぱいと読みます)という数値計算用ライブラリの使い方チュートリアルを書きたいと思います。

NumPy機械学習ディープラーニングなどを学ぶ上でも前提知識とされることが多いため、これからその辺の分野の勉強をしてみたい人の参考になればと思います。

チュートリアルの実行環境は、ブラウザだけでPythonNumPyも使えるオンラインのプログラミング実行環境「paiza.IO (パイザ・アイオー)を使っていきます。

NumPyにおける配列

NumPyにおける配列は"ndarray"という形式になっていて、このndarrayはいろいろな機能を持っています。

まず、普通のリストをndarrayに変換するには以下のようなやり方になります。

shape, ndim, dtype.name, itemsizeとndarrayにおけるいろいろな要素も同時に出力しています。

shapeは各次元ごとの配列の大きさ……要するに2次元配列の方では1次元が2要素、2次元が3要素……というわけで(2, 3)となっています。3次元配列の場合は、3次元目で[1, 2]と2要素なので(2, 3, 2)となります。

ndimは次元数を指しています。

type.nameは要素の型を表しています。

配列の初期化をする場合は、以下のようにzeros, onesなどが使えます。

他にも、arangeを使うとPythonのrangeの拡張(等差数列を生成)、linespaceを使うと特定区間の数値を等間隔でとれたりします。

■配列へのアクセス

いわゆる一般的な配列のように、"a[1][1]" のようなアクセスをすることも可能なのですが、NumPyでは "a[1, 1]" というようなアクセスが可能です。

また、縦一列、横一列、特定の範囲を切り取るような形の取得なども容易にできます。

↓具体的にはこんな感じ。

■配列への操作

NumPyでは、かなり柔軟に配列を操作することができます。

↓こんな感じで配列全体への加算など、演算適応も容易にできます。2次元配列の場合も、1次元目の何番目かを全体へ適応させることなどもできます。

2次元配列同士の掛け算は行列の積と勘違いしちゃいそうですが、行列の積を求める場合は "a.dot(b)" というような記述になります。

■配列同士の結合

配列同士を結合する場合は "hstacka(a, b)" "vstack(a, b)" を使います。

hが横、vが縦にaとbを繋げるという意味になります。

↓実際にやってみるとこんな感じ

■配列のいろいろな集計

配列の合計から、中央値などいろいろな集計を簡単にすることができます。

↓こんな感じで、sum(合計)・median(中央値)・mean(平均)・std(標準偏差)・var(分散)・max(最大)・min(最小)といった集計を容易にできます。

NumPyではこんなこともできます

◆相関関係を求める

相関係数を簡単に求めることができます。

多項式同士の計算など

np.poly1dを使えば多項式を作ることもできます。多項式同士の計算や特定の解を持つ多項式の生成などもできます。

■まとめ

Python数値計算用ライブラリでは、今回使ったNumPyが基本のライブラリというか、定番として多くの人に使われているので、覚えておいて損はないと思います。

Python数値計算処理が遅めな言語ではありますが、NumPyを使うと計算がすごく早くなります(※NumPyではC言語のネイティブコード上で計算が実行されるため)。

機械学習に限らず、ぜひ上記のようなコードを実際に書いて試してみてください。

NumPy公式ドキュメントはこちら

途中でブログパーツとして使ったオンライン実行環境サービス「paiza.IO (パイザ・アイオー)」はこちら


私が以前Pythonの便利なフレームワーク・ライブラリについて書いた記事はこちらですので、興味のある人は見てみてください。
paiza.hatenablog.com

Pythonの無料学習動画やアルゴリズムの学習動画も公開中!プログラミング学習コース

f:id:paiza:20160830130051j:plain
paizaでは、未経験者でも動画を通してプログラミング等が学べる「paizaラーニング」を公開しております。

Pythonの学習動画は全編無料アルゴリズムの学習は2017年1月30日までの期間限定で「アルゴリズム入門編2」が無料となっていますのでぜひお試しください。

paizaラーニングでは、paizaの人気美少女キャラクター霧島京子(cv:上間江望)が、かわいい声で優しく・楽しく・わかりやすくプログラミングを教えてくれます。「霧島京子による1本3分程度のレッスン動画」に加え、「ブラウザ上でコードを書いて実行できるオンライン実行環境」「複数の練習問題」で、初心者でも無理なくプログラミングを習得することができます。

paiza.jp




paizaではスキルのあるエンジニアがきちんと評価されるようにし、技術を追い続ける事が仕事につながるようにする事で、日本のITエンジニアの地位向上を図っていければと考えています。特にpaizaではWebサービス提供企業などでもとめられる、システム開発力や、テストケースを想定できるかの力(テストコードを書く力)などが問われる問題を出題しています。

テストの結果によりS,A,B,C,D,Eの6段階でランクが分かります。自分のプログラミングスキルを客観的に知りたいという方は是非チャレンジしてみてください。

http://paiza.jp