Python 配列の作成

array関数


リストなどのシーケンス型をnp.array関数に渡すとndarray型のオブジェクトが作られる。NumPyに関する文脈では、このndarrayを配列と呼ぶ。

配列には様々な属性がある。例えば、配列の次元をndim属性から確認できる。 また、配列の形状(各軸方向の大きさ)はshape関数から参照できる。

スクリーンショット 2020-07-17 14.25.31

2次元以上の配列をarray関数で作成する方法は2つある。1つはキーワード引数ndimを指定すること。2次元配列ではshape属性で配列の形状を確認すると、軸が2つなので要素が2つのタプルが返される。この配列の形状は(1, 4)と確認できる。

スクリーンショット 2020-07-17 14.26.25

もう1つの方法としては、ネスト構造のリストをarray関数に渡すことで2次元以上の配列を作成できる。

スクリーンショット 2020-07-17 14.27.03

NumPyではここまでに紹介した方法により、ベクトルを1次元配列と2次元配列のどちらでも表せる。しかし、1次元配列でベクトルを表すと行ベクトルと列ベクトルを区別できないので、配列の演算において注意が必要になる。

配列のデータ型

配列の要素は基本的にすべて同じ型であり、数値計算用途では整数型、浮動小数点数型、複素数型のような数値型とすることが多い。データに1つでも浮動小数点数型がある場合、配列の全要素は浮動小数点数型となる。

スクリーンショット 2020-07-17 14.30.46

配列のデータ型はdtype属性で参照できる。データ型の名前に含まれる64などの数は、メモリ上で1つの要素を表すのに必要なビット数を示している。

スクリーンショット 2020-07-17 14.31.34

NumPyで利用できるデータ型のクラスの一覧が表示される。このほかにnp.intなどがあり、システムの環境によってnp.int32やnp.int64のデータ型として扱われる。

スクリーンショット 2020-07-17 14.32.12

配列を作成する関数にはdtype引数があり、データ型を指定する。

スクリーンショット 2020-07-17 14.32.53

一度作成した配列のデータ型は変更できない。データ型の異なる配列を作成するにはastypeメソドッドを使用する。またはarray関数やデータ型のクラスを使って配列を作成する。

スクリーンショット 2020-07-17 14.33.26

値が0と1の配列

NumPyには、特定の規則に従って配列を作成する関数がたくさん用意されている。 要素がすべて0の配列はzeros関数、要素がすべて1の配列はones関数で作成する。どちらの関数も引数に与えられた形状で配列を作成する。1次元配列では整数、多次元配列では要素が整数のシーケンス型で配列の形状を指定する。

スクリーンショット 2020-07-17 14.34.47

要素が1の配列に数値をかければ、その数値で埋まった配列を作ることができる。また、一定値の配列を作成するfull関数が用意されている。

スクリーンショット 2020-07-17 14.35.17

NumPyには単に任意形状の配列を作成するための関数としてempty関数が実装されている。この関数は配列作成時に確保したメモリブロックに格納されている値をそのまま配列の要素とするため、配列作成にかかる時間が短い特徴がある。しかし、初期化されないために配列の値が不定であることに注意。

スクリーンショット 2020-07-17 14.35.58

配列には全要素を指定の値に変更するfillメソッドがあり、それを使うことでも一定値の配列を作成できる。また、ある配列と同じ形状で配列を作りたい場合はzeros_likeやfull_likeといった関数を使う。

スクリーンショット 2020-07-17 14.36.37

単位行列、対角行列、三角行列を表す配列


単位行列などの数学で頻出する行列を表す配列は簡単に作成できる。単位行列とは対角成分が1の正方行列である。単位行列を表す配列はidentity関数やeye関数で作成できる。関数の引数には行列の字数を指定する。

スクリーンショット 2020-07-17 14.37.54

一般的な対角行列はdiag関数やdiagflat関数で作成する。引数には対角成分をまとめたリストや配列などを指定し、対角成分を並べる位置をk引数で調整する。

スクリーンショット 2020-07-17 14.38.30

要素が1の下三角行列を表す配列をtri関数によって作成できる。

スクリーンショット 2020-07-17 14.39.04

既存の配列を元にして三角行列を作成するのがtril関数とtriu関数である。tril関数は指定配列の対角線より上の要素を0にした配列を返す。triu関数は対角線より下の要素を0にした配列を返す。

スクリーンショット 2020-07-17 14.39.33

値が等間隔で変化する配列


値が等間隔で変化する配列をarange関数やlinspace関数で作成できる。arange関数には(start, stop, step)という形式で引数を与える。配列の要素はstart(デフォルトは0)以上stop未満の区間で生成される。stepが値の増分で、デフォルトの値は1である。

スクリーンショット 2020-07-17 14.40.24

値の間隔が小数点数の配列を作る場合はlinspace関数を使う。引数は(start, stop, num)の形式で与える。numには配列の要素数を指定する。デフォルトではstopの値を含むように配列が作成されルガ、引数にendpoint=Falseを指定すればstopの値は含まれない。

スクリーンショット 2020-07-17 14.41.02

対数的に等間隔な値の要素を持つ配列を作成するにはlogspace関数を使用する。この関数はlinspaceと同様の引数を受け取る。対数の底はbase引数で指定でき、デフォルトでは10である(常用対数)。底がネイピア数eの自然対数であればnp.eと指定する。

スクリーンショット 2020-07-17 14.41.42

https://colab.research.google.com/drive/1bvSPDN5bJ91uHfwXUsGoJSYGV7QzKl8h#scrollTo=-O0PlBhxRcHD


この記事が気に入ったらサポートをしてみませんか?