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を形状変換します。...


  • Django マイグレーションの基本的な使い方

    Djangoはmodel.pyでデータベースの定義だけしておけば、CREATE文などSQLを自動で生成・実行することができます。データベースに定義情報を反映するマイグレーション機能の基本的な使い方を紹...


  • Django マイグレーションの状態を初期化・リセットする

    Djangoのマイグレーションの状態を初期化・リセットする方法を紹介します。appという名前でアプリケーションを作成し、Django マイグレーションの基本的な使い方で紹介した方法で、model.py...


  • Django データベースに初期データを登録する

    Djangoでデータベースに初期データを登録する方法を紹介します。appという名前でアプリケーションを作成し、Django マイグレーションの基本的な使い方で紹介した方法で、model.pyに定義した...


  • Windows 10 範囲を指定して画面のスクリーンショットを撮る方法

    Windows 10で範囲を指定して画面のスクリーンショットを撮る方法を紹介します。画面全体の指定した部分のみを切り取ってクリップボードに保存します。Windows 7を使っていた頃は、WinShot...


  • Windows 10 クリップボードの履歴を複数管理して貼り付ける方法

    Windows 10でクリップボードの履歴を複数管理して貼り付ける方法を紹介します。通常コピーした文字列は、別の値をコピーすると、最初にコピーした文字列は消えてしまいます。例えば以下の手順で貼り付けを...


  • WEBアプリでプッシュ通知を実装する

    WEBアプリでプッシュ通知を実装する方法を紹介します。googleが紹介している以下のページを参考にしました。ウェブアプリへのプッシュ通知の追加 | Web | Google Develope...


  • JavaScript WEBアプリのプッシュ通知の許可を取り消す方法

    WEBアプリでプッシュ通知を実装するでWEBアプリでプッシュ通知を実装する手順を紹介しましたが、ここでは逆にプッシュ通知削除する方法を紹介します。先のページで紹介したように、ページロード時に以下のよう...


  • webpack postcssを導入する

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


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

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