配列の生成

目的

機械学習の対象となるデータやビッグデータは同じ型のデータの集合であることが多い.同じ型のデータの集合を扱う際に,配列(array)を使用する.ここでは,numpyと呼ばれる数値計算モジュールのN次元配列(N-dimensional array)であるndarrayオブジェクトの作り方を学ぶ.

説明

配列オブジェクトの生成

まず,numpyモジュールを使用して配列オブジェクトを生成してみよう.例えば,英語・数学・国語のテストの点数からなる配列オブジェクトを生成するには,以下のようにすればよい.

1行目でnumpyモジュールをインポートし,5行目で3教科のテストの点数からなる配列オブジェクトを生成している.6行目で配列オブジェクトを,7行目でその型を表示している.

このプログラムを実行すると,以下のように表示され,3教科のテストの点数からなるnumpyモジュールのndarrayオブジェクトが生成されていることが確認できる.

配列の要素の参照

インデックス番号による各要素の参照

配列の各要素の値を参照するには,リストの場合と同様に,インデックス番号を指定すればよい.3教科のテストの点数からなる配列オブジェクトから各教科の点数を参照するには以下のようにすればよい.

8行目から10行目のように,配列オブジェクト名scoresの後に大括弧で囲んでインデックス番号を指定すれば,配列の各要素の値を参照できる.また,12行目から14行目のように,負のインデックス番号を指定することで,逆順に要素を参照できる.

このプログラムを実行すると,以下のように表示される.

例えば,以下のように配列の要素数を越えるインデックス番号を指定すると,

以下のようなエラーが表示される.

繰り返しによる全要素の参照

配列オブジェクトはイテラブルなオブジェクトであるため,リスト等と同様に,for文を用いた繰り返し処理をすることができる.繰り返しにより全要素の値を参照するには,以下のようにすればよい.

このプログラムを実行すると,いかのようになり,配列の全ての要素が表示されていることがわかる.

配列の要素の型

要素の型を参照する

配列の要素の型は配列オブジェクトの「dtype」変数で参照できる.

5行目と9行目で配列オブジェクトを生成し,7行目と11行目で配列の要素の型を表示している.

このプログラムを実行すると,以下のように表示され,配列aの要素の型は64ビットの整数型,配列bの要素の型は64ビットの浮動小数点数型であることがわかる.

要素の型を指定して配列を生成する

配列を生成する際に,コンストラクタのキーワード引数dtypeで要素の型を指定することができる.

例えば,5行目のように記述すると,要素の型が64ビットの浮動小数点数型の配列を,9行目のように記述すると,要素の型が8ビットの符号なし(unsigned)整数型の配列を生成できる.

このプログラムを実行すると,以下のように表示され,指定した要素の型をもつ配列が生成されていることがわかる.

要素の型を変更する

配列の要素の型を変更(キャスト)するには,配列オブジェクトのastypeメソッドを使用すればよい.

1行目のように生成したint64型の要素をもつ配列をfloat64型の要素ともつ配列に変更するには,9行目のように記述すればよい.

このプログラムを実行すると,配列の要素の型がint64からfloat64に変更されていることがわかる.

関数を使用した配列の生成

zeros, ones, full, empty関数

要素が全て0の配列・全て1の配列・全て指定した値の配列・全て空(任意の値)の配列を生成するには,numpyモジュールのzeros・ones・full・empty関数を使用すればよい.

5,6,8行目のように,zeros関数・ones関数・empty関数に,生成する要素の数を引数で指定すると,要素が全て0・全て1・全て空(任意の値)の配列を生成することができる.また,7行目のように,full関数に生成する要素の数と値を引数で指定すると,指定した値を要素とする配列を生成することができる.

このプログラムを実行すると,以下のように表示され,10個の要素が全て0の配列,全て1の配列,全て2の配列,全て空(任意の値)の配列が生成されていることが確認できる.

zeros関数・ones関数・full関数・empty関数は,キーワード引数dtypeに要素の型を指定することができる.例えば,以下のようにすると,

zeros, ones, emptyの出力は整数に,fullの出力は浮動小数点数になる.

arange関数

numpyモジュールのarange関数を使用すると,範囲を指定して整数値からなる配列を生成することができる.

5行目のように記述すると,0から始まり引数で指定した要素数の(0から始まり引数で指定した数-1までの)整数値からなる配列を生成することができる.6行目のように記述すると,5から10−1までの整数値からなる配列を生成することができる.7行目のように記述すると,5から10−1までのステップ幅2の整数値からなる配列を生成することができる.

このプログラムを実行すると,実行すると,以下のように表示される.

linspace関数

numpyモジュールのlinspace関数を使用すると,範囲と要素数を指定して,その範囲を要素数で等分した数値からなる配列を生成することができる.

5行目のように記述すると,0から10の範囲を5-1等分した数値からなる配列を生成することができる.このプログラムを実行すると,以下のように表示される.

課題

課題0

英語・数学・国語・理科・社会のテストの点数からなる配列を作成せよ.

課題1

英語・数学・国語・理科・社会のテストの点数からなる配列を作成し,国語の試験の点数を表示せよ.

課題2

英語・数学・国語・理科・社会のテストの点数からなる配列を作成し,繰り返しを使用し,全ての科目の試験の点数を表示せよ.

課題3

100個の要素が全て1の配列を作成せよ.

課題4

100個の要素が全て2の配列を作成せよ.

課題5

100個の要素が全て適当な値の配列を作成せよ.

課題6

100個の要素が全て0の整数値の配列を作成せよ.

課題7

180から360までで30ずつ大きくなる整数からなる配列を作成せよ.

課題8

180から360を6等分する数値からなる配列を作成せよ.

課題9

180から360を6等分する整数値からなる配列を作成せよ.