zukucode
主にWEB関連の情報を技術メモとして発信しています。

NumPy 行列の各行の先頭に要素を追加する

NumPyで行列の各行の先頭に要素を追加する方法を紹介します。

例えば機械学習で、データセットのすべての訓練インスタンスにバイアスを設定するときなどに使用します。

例えば以下のNumPy配列があるとします。3つの特徴量を持つ訓練データが4つあるイメージです。

import numpy as np
data = np.array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9],
       [10, 11, 12]])

print(data)
# [[ 1  2  3]
# [ 4  5  6]
# [ 7  8  9]
# [10 11 12]]

4つの訓練データの要素の先頭にバイアスの要素を追加します。

バイアスの値はすべて1で追加しています。

m, n = data.shape
data_plus_bias = np.c_[np.ones(m, 1), data]

print(data_plus_bias)
# [[ 1.  1.  2.  3.]
#  [ 1.  4.  5.  6.]
#  [ 1.  7.  8.  9.]
#  [ 1. 10. 11. 12.]]

解説

m, n = data.shapedata配列の行数、列数を取得します。

mには行数、nには列数がセットされます。

np.ones(shape)ですべての要素が1の配列を作成します。

a = np.ones((2, 3))

print(a)
# [[1. 1. 1.]
#  [1. 1. 1.]]
m, n = data.shape
a = np.ones((m, 1))

print(a)
# [[1.]
# [1.]
# [1.]
# [1.]]

np.c_[配列A, 配列B]とすると、配列Aと配列Bを結合します。

a = np.array([[1, 2],
              [3, 4]])
b = np.array([[5, 6],
              [7, 8]])

c = np.c_[a, b]
print(c)
# [[1 2 5 6]
#  [3 4 7 8]]

np.ones(m, 1)で作成した配列とdataを結合すれば以下のようになります。

m, n = data.shape
data_plus_bias = np.c_[np.ones(m, 1), data]

print(data_plus_bias)
# [[ 1.  1.  2.  3.]
#  [ 1.  4.  5.  6.]
#  [ 1.  7.  8.  9.]
#  [ 1. 10. 11. 12.]]

関連記事

  • NumPy 1次元配列を列ベクトルに変換する方法

    NumPyで1次元配列(1次元のNumPy配列)を列ベクトルに変換する方法を紹介します。reshapeで配列の形状を変換します。配列A.reshape(行数, 列数)とすると、配列Aを形状変換します。...


  • webpack postcssを導入する

    webpackでpostcssを導入してautoprefixerなどを行います。postcss-loaderはwebpackでpostcssを行うために必要です。postcssの設定ファイルを作成しま...


  • webpack lessをImportしてビルドする

    htmlやbodyなどに適用するベースのクラスを外部のlessファイルに実装して、スタイルをサイト全体に適用したい場合があります。外部のlessファイルをモジュールとしてImportしてwebpack...


  • webpack-dev-serverでhttpsでのアクセスを可能にする方法

    webpack-dev-serverでhttpsでのアクセスを可能にする方法を紹介します。外部APIのテストや、メディアデバイスのテストなどで、開発中のlocalhostをhttpsにする必要があると...


  • ExtractTextPluginでcssファイルを出力する

    webpackのプラグインExtractTextPluginを使って、ビルドされたjsファイルからstyleの部分を抽出してcssファイルで出力します。extract-text-webpack-plu...


  • webpackの設定を開発環境と本番環境で変更する

    webpack.config.jsで本番環境でのビルドのみコードを圧縮するなどの処理を設定したい場合があります。webpackの設定を開発環境と本番環境で変更する方法を紹介します。cross-envと...


  • webpack-dev-serverで開発サーバーを起動する

    webpack-dev-serverで開発サーバーを起動します。vueファイル(単一ファイルコンポーネント)をwebpackでビルドページで紹介したwebpack.config.jsにdevServe...


  • webpack モジュールのパスを絶対パスで指定する方法

    自分で作成したモジュールをインポートするときはインポートするファイルを基準に相対パスで指定する必要があります。フォルダ構成によっては深く階層を辿らないといけないので、フォルダ構成が変わってしまうと大変...


  • webフォントがIE11で表示されない場合の対処法

    FontAwesomeなどのwebフォントがなぜかIE11のみ表示されないことがありました。直接の詳しい原因はわかりませんが、htaccessで以下のように記載してキャッシュコントロールしているとうま...


  • Vuex 厳格(strict)モードでエラーになるよくある原因

    Vuexの厳格(strict)モードでエラーになってしまう原因でよくあるパターンです。stateに格納した配列をソートして表示するときに、stateの値をcomputedやgettersでそのままソー...