Web制作、Web開発の歩き方

初心者のためのDjango入門

■第12話:Numpy配列の作成と操作

(最終更新日:2023.06.04)

Djangoフレームワークのイメージ
この記事は5分で読めます!
(絵が小さい場合はスマホを横に)

「NumPy配列を作成しよう!」

前回、NumPyを使うための環境構築と、arrayメソッドによる1,2,3次元のNumPy配列の作成方法を説明した。 今回は、arrayだけでなく、他のメソッドによる配列の作成方法を紹介するとともに、追加、削除といった配列の操作方法を紹介する。 超高速な配列操作ができるNumPyの基本的な操作方法を学んでいこう。


1.NumPy配列の初期化

前回、np.arrayを用いて、多次元のNumPy配列を作成できることを説明した。 今回はまず、NumPy配列の初期化方法について説明する。

NumPy配列の初期化

NumPy配列の初期化

上から順番に説明すると、一番上はzerosメソッドで3×3のNumPy配列をゼロで初期化している。 2番目は、任意の数値(7)で初期化している。 初期化する理由としては、一般的に行われる未定義値混入のリスク回避や、 先にNumPyの形状を決めておきたい場合(プレースホルダとしての役割)である。

次に、等間隔なNumPy配列の作成方法を示す。

等間隔な値での作成

等間隔な値での作成

上のarrangeは0~10までの値を2刻みで埋めるNumPy配列を作成している。 下のlinspaceは0~1の値を5分割、等間隔で埋めるNumPy配列を作成している。

このようなNumPy配列を用意する理由としては、座標軸の範囲やステップ(目盛)の指定や、 比較用としての数値(線形的な値から実測値がどれだけズレているかの確認)、 シミュレーション用の値(理想値を入れた場合のアルゴリズムの計算結果確認)などが挙げられる。 DeepLearningなどの数学的計算、データ処理、統計処理を行ったことがない人はピンと来ないかもしれないが、 まずは便利な比較値、模擬値で使えるという認識で良いと思う。

2.NumPy配列の属性

NumPyには、次元数をはじめとして各属性が存在する。 それらについて、簡単に学んでおこう。下記に各属性値の確認方法を示す。

NumPy配列の各属性

NumPy配列の各属性

上から順番に、ndimはNumPy配列の次元数を返す。 次のshapeは2次元で要素数3の配列という形状を示している。 3番目のsizeは、全ての次元を足した要素数を返す。 最後のdtypeはNumPy配列のデータ型を示す。 NumPy配列に関する情報を得たい場合は、これらの属性が役に立つ。 ただし、これらは値を返す属性で、配列の作成に関しては前項の初期化で作成するか、規則的な値でNumPy配列を作成するか 直接値を指定して行う。

3.NumPy配列の基本的な操作

NumPy配列はPythonのリストと同様に操作することも可能だが、さらに高度な操作も用意している。 ここでは、インデックスとスライスについて説明する。

様々なNumPy配列

様々なNumPy配列

最初のインデックスでは、その要素に対応する値を取得することができる。 arr1[0]はarr1の最初の要素なので1を示し、arr2[1,1]は2番目の配列の2つ目の要素を指定しているので、5を表示する。 次のスライスでは、arr1[1:3]は2番目の要素から3番目の要素まで取得している。 (要素は1番目を0として数える。そのため1は2番目の要素となる。 また、末尾は3なので4番目を指定しているが、その1つ前の3番目までを取得する仕様になっている。) そして、arr2[0:2, 0:2]は、最初の配列から1番目の要素から2番目の要素を、2つ目の配列から1番目の要素から2番目の要素を取得している。 特別な関数を使わず、括弧と数値で指定するだけで、このような高度な操作が可能である。


4.NumPy配列の変形

本項の最後に、NumPy配列の変形について説明する。配列の形状を変更するには、reshapeメソッドを使用する。 reshape(2, 5)は2次元で5個の要素の配列に変更している。そのため、0~4と5~9の2つの配列で再構成されている。 ここで注意すべきは、reshapeは元の配列を変更せず、新たな配列を作成している。 もし、元の配列を変更したい場合は、resizeメソッドを用いれば、それが可能である。 加えて、reshapeやresizeで配列の形状を変更する場合は、変形前後で総要素数が同じになるようにしよう。 総要素数が異なる場合は、エラーが出て、処理を行うことができない。

様々なNumPy配列

様々なNumPy配列

加えて、NumPy配列には転置という処理がある。転置は行と列を入れ替える操作だ。 下記のようにT属性を使用し、2×3のNumPy配列を3×2の配列に入れ替えている。 転置の数学的な意味自体は線形代数の教科書に任せるとして、これらの積で内積(ある方向の仕事量)を表現できるということに留める。

NumPy配列の転置

NumPy配列の転置

5.まとめ

今回、NumPy配列の基本的な操作や変形方法について説明した。 Pythonの配列操作と共通する部分もあるが、中で行っている処理が異なるため、基本的には別物だと思っておこう。 同じデータ型しか組み込めないというのも、Pythonのlistとは大きく異なる点だ。

基本的な操作ではあるが、DeepLearningなどの応用で用いるのも、このような操作と計算処理である。 まずは、今回紹介した基礎を身に着けよう。


▼参考図書、サイト

転置行列の意味・重要な7つの性質と証明  高校数学の美しい物語
Pythonプログラミング入門 5-3. NumPyライブラリ  東京大学 数理・情報教育研究センター