Python モジュール: numpy
概要
- Python で行列を扱うためのモジュール
使い方
モジュールの読み込み
import numpy
あるいは
import numpy as np
as np
によって、以降np
で呼び出せる。- ここではこっちの読み込みをした場合で記述していく。
行列
行列の作成
- numpy 用の行列データ
matrix
を作成する方法- リストを numpy 用の行列に変換する場合
matrix = np.array(list_matrix)
list_matrix
: リストで作成した行列
- ゼロ行列を作成する場合
matrix = np.zeros([row,col])
row
: 行のサイズ (0
を指定することで空の行列を作ることができる)col
: 列のサイズ
行列の結合
- 縦に結合 (行を追加)
matrix = np.vstack((matrix1, matrix2))
matrix1
,matrix2
: 結合する行列データ- 結合する行列データは何個でも指定できる。
- タプルで指定するため、
vstack
の後は関数用とタプル用の括弧で二重になる。
- 横に結合 (列を追加)
matrix = np.hstack((matrix1, matrix2))
matrix1
,matrix2
: 結合する行列データ- 結合する行列データは何個でも指定できる。
- タプルで指定するため、
vstack
の後は関数用とタプル用の括弧で二重になる。
行列の抽出
- 特定の要素を抽出
value = matrix[row][col]
value
: 抽出した要素を格納する変数row
: 抽出したい行 (リストと同じく、0 から始まるインデックスを指定)col
: 抽出したい列 (リストと同じく、0 から始まるインデックスを指定)
- 特定の要素をスライスで抽出
new_matrix = matrix[row_slice][col_slice]
new_matrix
: 抽出した行列を格納する変数row_slice
: 抽出する行を指定するスライスcol_slice
: 抽出する列を指定するスライス- リストと同じく、スライス (例:
[2:5]
) で範囲で抽出することができる。
- 不連続な範囲を抽出
new_matrix = matrix[np.array(row_list)][:,np.array(col_list)]
new_matrix
: 抽出した行列を格納する変数row_list
: 抽出したい行のリストcol_list
: 抽出したい列のリスト- 不連続な範囲 (例:
2,5,8,10
など) を抽出する場合は、行列データに行列データのインデックスを与える。ここでは、np.array()
を使っているが、行列データを指定するのであれば、np.array()
を使う必要はない。 - 上記の方法だと
ランダムな行列の作成
- テスト用などに使えるかも。
- 小数の行列 (0〜1 まで)
matrix = np.random.rand(SHAPE)
SHAPE
: 行列のサイズ (多次元の場合、カンマで区切ってサイズを表記する; 例:3,100
)
- 整数の行列
matrix = np.random.randint([LOW,] HIGH, size = SHAPE)
LOW
: 最小値 (オプション)HIGH
: 最大値 (指定した値は含まない)SHAPE
: 行列のサイズ (多次元にする場合はタプルで指定する)
- 対称行列 (既に matrix は生成済みの場合)
symmetry = (matrix + matrix.T) / 2 np.fill_diagonal(symmetry, 0)
- 1 行目で、転置行列と足し合わせて、対称な行列を作成する。
np.fill_diagonal(matrix, var)
はmatrix
の対角成分にvar
を代入する関数で、これにより対角成分が 0 になる。破壊的なメソッドなので、元の行列は残らない。
ゼロ行列の作成
- 要素すべてが 0 の行列の作成
MATRIX = np.zeros(SHAPE, dtype = TYPE)
MATRIX
: ゼロ行列を格納する変数SHAPE
: 行列のサイズ (多次元にする場合はタプルで指定する)TYPE
: 行列の型
空の行列の作成
- 空の行列 (ただし、値は 0 とは限らない) を作成する。
NEW_MATRIX = np.empty((ROW, COL), dtype = TYPE)
NEW_MATRIX
: 空の行列を格納する変数ROW
: 生成する行列の行数COL
: 生成する行列の列数TYPE
: データ型dtype
は省略可
- 既存の行列と同じサイズの空の行列を作成する。
NEW_MATRIX = np.empty_like(MATRIX)
NEW_MATRIX
: 空の行列を格納する変数MATRIX
: サイズを参照したい行列
行列全体のキャスト
- 行列全体のデータ型を変える。
NEW_MATRIX = MATRIX.astype(TYPE)
NEW_MATRIX
: データ型変換後の行列データを格納する変数MATRIX
: 変換したい行列データTYPE
: データ型np.float
: 浮動小数点型np.int
: 整数型
対角行列の生成
- 対角成分の配列から、対角行列を生成する。
DIAG_MATRIX = np.diagflat(MATRIX1D)
DIAG_MATRIX
: 対角行列を格納する変数MATRIX1D
: 対角成分のみの 1 次行列
- 参考サイト: 対角行列の生成 - gerumaniumの日記
対角成分の抽出
- 行列から対角成分を抽出する。
DIAG = np.diag(MATRIX)
DIAG
: 対角成分を格納する変数MATRIX
: 対角成分を抽出したい行列
ヒストグラム
- 行列データをヒストグラム分類することもできる。
np.histogram(MATRIX, bins = BINS, density = DENSITY_BOOL)
MATRIX
: ヒストグラム化したい行列データ (1次元データに変換される)BINS
: ヒストグラムの幅- int (整数) で指定すると分割数
- リストで指定すると、リストの各要素が各ヒストグラムバーの最小値となる。
“auto”
、“fd”
、“doane”
、“scott”
、“rice”
、“sturges”
、“sqrt”
を指定すると、各アルゴリズムに合わせた BINS が生成される。詳しくはドキュメントを参照。
DENSITY_BOOL
: 確率表示の有無True
を指定すると、0〜1 の確率で表示する。False
を指定すると、要素のカウント数で表示する。
- 結果 (numpy の行列データで返される)
- 1 番目の結果: ヒストグラム (
DENSITY = True
の場合は確率) - 2 番目の結果: BINS
- 参考サイト: