python:numpy

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 次行列

対角成分の抽出

  • 行列から対角成分を抽出する。
    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
  • 参考サイト:
  • python/numpy.txt
  • 最終更新: 2019/01/29 10:34
  • by mumeiyamibito