python:numpy

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
python:numpy [2017/12/06 10:52] – [ランダムな行列の作成] mumeiyamibitopython:numpy [2019/01/29 10:34] (現在) mumeiyamibito
行 12: 行 12:
   * ここではこっちの読み込みをした場合で記述していく。   * ここではこっちの読み込みをした場合で記述していく。
  
-==== 行列の作成 ====+==== 行列 ==== 
 +=== 行列の作成 ===
   * numpy 用の行列データ ''matrix'' を作成する方法   * numpy 用の行列データ ''matrix'' を作成する方法
     * リストを numpy 用の行列に変換する場合\\ <code python>matrix = np.array(list_matrix)</code>     * リストを numpy 用の行列に変換する場合\\ <code python>matrix = np.array(list_matrix)</code>
行 20: 行 21:
       * ''col'': 列のサイズ       * ''col'': 列のサイズ
  
-==== 行列の結合 ====+=== 行列の結合 ===
   * 縦に結合 (行を追加)\\ <code python>matrix = np.vstack((matrix1, matrix2))</code>   * 縦に結合 (行を追加)\\ <code python>matrix = np.vstack((matrix1, matrix2))</code>
     * ''matrix1'', ''matrix2'': 結合する行列データ     * ''matrix1'', ''matrix2'': 結合する行列データ
行 30: 行 31:
     * タプルで指定するため、''vstack'' の後は関数用とタプル用の括弧で二重になる。     * タプルで指定するため、''vstack'' の後は関数用とタプル用の括弧で二重になる。
  
-==== 行列の抽出 ====+=== 行列の抽出 ===
   * 特定の要素を抽出\\ <code python>value = matrix[row][col]</code>   * 特定の要素を抽出\\ <code python>value = matrix[row][col]</code>
     * ''value'': 抽出した要素を格納する変数     * ''value'': 抽出した要素を格納する変数
行 40: 行 41:
     * ''col_slice'': 抽出する列を指定するスライス     * ''col_slice'': 抽出する列を指定するスライス
     * リストと同じく、スライス (例: ''[2:5]'') で範囲で抽出することができる。     * リストと同じく、スライス (例: ''[2:5]'') で範囲で抽出することができる。
-  * 不連続な範囲を抽出\\ <code python>new_matrix = matrix[np.array(row_list),np.array(col_list)]</code>+  * 不連続な範囲を抽出\\ <code python>new_matrix = matrix[np.array(row_list)][:,np.array(col_list)]</code>
     * ''new_matrix'': 抽出した行列を格納する変数     * ''new_matrix'': 抽出した行列を格納する変数
     * ''row_list'': 抽出したい行のリスト     * ''row_list'': 抽出したい行のリスト
     * ''col_list'': 抽出したい列のリスト     * ''col_list'': 抽出したい列のリスト
     * 不連続な範囲 (例: ''2,5,8,10'' など) を抽出する場合は、行列データに行列データのインデックスを与える。ここでは、''np.array()'' を使っているが、行列データを指定するのであれば、''np.array()'' を使う必要はない。     * 不連続な範囲 (例: ''2,5,8,10'' など) を抽出する場合は、行列データに行列データのインデックスを与える。ここでは、''np.array()'' を使っているが、行列データを指定するのであれば、''np.array()'' を使う必要はない。
 +    * 上記の方法だと
   * 参考サイト: [[http://oimokihujin.hatenablog.com/entry/2015/10/01/112450 | numpy.arrayによる2次元配列から任意の列を抽出する方法 - おいも貴婦人ブログ]]   * 参考サイト: [[http://oimokihujin.hatenablog.com/entry/2015/10/01/112450 | numpy.arrayによる2次元配列から任意の列を抽出する方法 - おいも貴婦人ブログ]]
  
-==== ランダムな行列の作成 ====+=== ランダムな行列の作成 ===
   * テスト用などに使えるかも。   * テスト用などに使えるかも。
   * 小数の行列 (0〜1 まで)\\ <code python>matrix = np.random.rand(SHAPE)</code>   * 小数の行列 (0〜1 まで)\\ <code python>matrix = np.random.rand(SHAPE)</code>
-    * ''SHAPE'': 行列のサイズ (多次元にする場合はタプル指定する)+    * ''SHAPE'': 行列のサイズ (多次元場合、カンマ区切ってサイズを表記する; 例: ''3,100'')
   * 整数の行列\\ <code python>matrix = np.random.randint([LOW,] HIGH, size = SHAPE)</code>   * 整数の行列\\ <code python>matrix = np.random.randint([LOW,] HIGH, size = SHAPE)</code>
     * ''LOW'': 最小値 (オプション)     * ''LOW'': 最小値 (オプション)
     * ''HIGH'': 最大値 (指定した値は含まない)     * ''HIGH'': 最大値 (指定した値は含まない)
     * ''SHAPE'': 行列のサイズ (多次元にする場合はタプルで指定する)     * ''SHAPE'': 行列のサイズ (多次元にする場合はタプルで指定する)
 +  * 対称行列 (既に matrix は生成済みの場合)\\ <code python>symmetry = (matrix + matrix.T) / 2
 +np.fill_diagonal(symmetry, 0)</code>
 +    * 1 行目で、転置行列と足し合わせて、対称な行列を作成する。
 +    * ''np.fill_diagonal(matrix, var)'' は ''matrix'' の対角成分に ''var'' を代入する関数で、これにより対角成分が 0 になる。破壊的なメソッドなので、元の行列は残らない。
 +
 +=== ゼロ行列の作成 ===
 +  * 要素すべてが 0 の行列の作成\\ <code python>MATRIX = np.zeros(SHAPE, dtype = TYPE)</code>
 +    * ''MATRIX'': ゼロ行列を格納する変数
 +    * ''SHAPE'': 行列のサイズ (多次元にする場合はタプルで指定する)
 +    * ''TYPE'': 行列の型
 +
 +=== 空の行列の作成 ===
 +  * 空の行列 (ただし、値は 0 とは限らない) を作成する。\\ <code python>NEW_MATRIX = np.empty((ROW, COL), dtype = TYPE)</code>
 +    * ''NEW_MATRIX'': 空の行列を格納する変数
 +    * ''ROW'': 生成する行列の行数
 +    * ''COL'': 生成する行列の列数
 +    * ''TYPE'': データ型
 +    * ''dtype'' は省略可
 +  * 既存の行列と同じサイズの空の行列を作成する。\\ <code python>NEW_MATRIX = np.empty_like(MATRIX)</code>
 +    * ''NEW_MATRIX'': 空の行列を格納する変数
 +    * ''MATRIX'': サイズを参照したい行列
 +  * 参考サイト: [[https://note.nkmk.me/python-numpy-empty-empty-like/ | NumPyで空の配列ndarrayを生成するemptyとempty_like | note.nkmk.me]]
 +
 +=== 行列全体のキャスト ===
 +  * 行列全体のデータ型を変える。\\ <code python>NEW_MATRIX = MATRIX.astype(TYPE)</code>
 +    * ''NEW_MATRIX'': データ型変換後の行列データを格納する変数
 +    * ''MATRIX'': 変換したい行列データ
 +    * ''TYPE'': データ型
 +      * ''np.float'': 浮動小数点型
 +      * ''np.int'': 整数型
 +
 +=== 対角行列の生成 ===
 +  * 対角成分の配列から、対角行列を生成する。\\ <code python>DIAG_MATRIX = np.diagflat(MATRIX1D)</code>
 +    * ''DIAG_MATRIX'': 対角行列を格納する変数
 +    * ''MATRIX1D'': 対角成分のみの 1 次行列
 +  * 参考サイト: [[http://d.hatena.ne.jp/gerumanium/20110907/1315403852 | 対角行列の生成 - gerumaniumの日記]]
 +
 +=== 対角成分の抽出 ===
 +  * 行列から対角成分を抽出する。\\ <code python>DIAG = np.diag(MATRIX)</code>
 +    * ''DIAG'': 対角成分を格納する変数
 +    * ''MATRIX'': 対角成分を抽出したい行列
 +
 +==== ヒストグラム ====
 +  * 行列データをヒストグラム分類することもできる。\\ <code python>np.histogram(MATRIX, bins = BINS, density = DENSITY_BOOL)</code>
 +    * ''MATRIX'': ヒストグラム化したい行列データ (1次元データに変換される)
 +    * ''BINS'': ヒストグラムの幅
 +      * int (整数) で指定すると分割数
 +      * リストで指定すると、リストの各要素が各ヒストグラムバーの最小値となる。
 +      * ''"auto"''、''"fd"''、''"doane"''、''"scott"''、''"rice"''、''"sturges"''、''"sqrt"'' を指定すると、各アルゴリズムに合わせた BINS が生成される。詳しくはドキュメントを参照。
 +    * ''DENSITY_BOOL'': 確率表示の有無
 +      * ''True'' を指定すると、0〜1 の確率で表示する。
 +      * ''False'' を指定すると、要素のカウント数で表示する。
 +    * 結果 (numpy の行列データで返される)
 +      * 1 番目の結果: ヒストグラム (''DENSITY = True'' の場合は確率)
 +      * 2 番目の結果: BINS
 +  * 参考サイト: 
 +    * [[https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.histogram.html | numpy.histogram — NumPy v1.13 Manual]]
 +    * [[http://yakumido.blogspot.jp/2014/08/numpy.html | やくみ堂~砂漠から徒歩3分~: numpyとscipyのヒストグラム]]
  
  
 {{tag>プログラミング}} {{tag>プログラミング}}
  
  • python/numpy.1512525147.txt.gz
  • 最終更新: 2017/12/06 10:52
  • by mumeiyamibito