機械学習の基礎の基礎、行列計算に欠かせないNumPyの基本的な使い方Pythonで始める機械学習入門(3)(2/2 ページ)

» 2017年02月23日 05時00分 公開
[加藤公一シルバーエッグ・テクノロジー]
前のページへ 1|2       

スライシングとインデクシング

与えられた配列の一部を取り出すスライシング

 与えられた配列の一部を取り出すには「スライシング」という仕組みを使います。ベクトル(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の疎行列型の扱いについて説明します。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。