機械学習の基礎の基礎、行列計算に欠かせないNumPyの基本的な使い方:Pythonで始める機械学習入門(3)(2/2 ページ)
最近流行の機械学習/Deep Learningを試してみたいという人のために、Pythonを使った機械学習について主要なライブラリ/ツールの使い方を中心に解説する連載。今回は、科学的計算の基本的パッケージNumPyを使って、配列の基本操作、スライシングとインデクシング、配列を使った簡単な計算の仕方などを紹介。
スライシングとインデクシング
与えられた配列の一部を取り出すスライシング
与えられた配列の一部を取り出すには「スライシング」という仕組みを使います。ベクトル(1次元配列)「v」に対して、「v[i:j]」「v[i:]」「v[:j]」などとして一部の要素を抽出できるのはリスト型と同様です(In[22]:〜In[24]:)。また2次元配列については、「a[i:j,k:l]」のように、それぞれのインデックスでのスライシングができます(In[26]:〜In[29]:)。インデックスについて負の数は後ろから数えたインデックスを意味します。これもリスト型の扱いと同様です(In[25]:)。
配列の形状を変更するreshape
In[26]:の、「reshape」というのは配列の形状を変更するためのメソッドです。このサンプルコードだと、「np.arange(9)」でサイズ9の1次元配列を作っているので、それを「reshape」で3×3の2次元配列に変更しています。
配列参照のカッコの中に配列を入れて、複数の要素を一気に取り出すインデクシング
配列参照のカッコの中に、インデックスの列を表す配列を入れることで、複数の要素を一気に取り出すことができます。この操作のことを「インデクシング」と呼びます。
インデクシングでBool型を要素に持つ配列を使う
またインデクシングでは、インデックス列を表す配列以外にも、Bool型を要素に持つ配列を使うこともできます。この場合、参照される配列とカッコに入れられるBool型を要素に持つ配列は形状が同じである必要があり、Trueである部分の要素が取り出されます。
配列を使った簡単な計算
次に、配列を使った計算方法を幾つか紹介します。
和を求めるnumpy.sumと平均値を求めるnumpy.mean
和と平均値を求めるには「numpy.sum」「numpy.mean」を使います。これらは名前付き引数「axis」を指定することで、どの方向に計算するかを指定でき、「axis」の指定がない場合は全ての要素の和(平均値)を計算します。
最小値を求めるnumpy.minと最大値を求めるnumpy.max
また、「numpy.min」(最小値)、「numpy.max」(最大値)、「numpy.argmin」(最小値を取るインデックス値)、「numpy.argmax」(最大値を取るインテックス値)なども同じ使い方をします。
行列積を求めるnumpy.dot
行列の掛け算は「numpy.dot」を使います。ここで2次元配列は行列と見なされ、1次元配列はベクトルと見なされます。1次元ベクトルが列ベクトルと見なされるか、行ベクトルと見なされるか、はnumpy.dotの呼び出し時に、都合が良いように自動で判断されます。
行列を表す型numpy.matrix
実はnumpyには2次元配列ではなく、行列を表す型「numpy.matrix」も存在しますが、2次元配列の方が高機能なため、行列型が使われることはほとんどありません。そのため、以降は、行列型を無視して進めていきます。
「*(アスタリスク)」演算子
配列についての「*(アスタリスク)」演算子も存在しますが、それは行列の積を意味しないので注意が必要です。形状が同じ2つの配列について、四則演算子は要素ごとの計算を意味します。
次回は、配列を使った、さらに技巧的な計算手法について
今回の記事では、NumPyの配列の基本を説明しました。特にデータの詰め方、取り出し方、簡単な計算方法に注目して説明しました。次回は、配列を使った、さらに技巧的な計算手法と、SciPyの疎行列型の扱いについて説明します。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
機械学習、ビッグデータ解析に欠かせない、PythonをWindowsにダウンロードしてインストール、アンインストールする
本連載では、さまざまなソフトウェアのインストール、実行するためのセットアップ設定、実行確認、アンインストールの手順を解説する。今回は、Pythonとは何か、Pythonのインストールとアンインストールについて解説。Pythonがよく使われる機械学習やビッグデータ解析を始める参考にしてほしい。ITエンジニアがデータサイエンティストを目指すには?
それぞれの専門分野を生かした「データサイエンスチーム」を結成すればデータ活用への道は短縮できる。そのとき、ITエンジニアはどんな知識があればいい? データサイエンティストとして活動する筆者が必須スキル「だけ」に絞って伝授します。Recurrent Neural Networkとは何か、他のニューラルネットワークと何が違うのか
本連載では、Deep Learningの中でも、時系列データを扱うRecurrent Neural Networkについて解説。加えて、その応用方法として原稿校正(誤字脱字の検知)の自動化について解説します。