【初心者向け】NumPy matlib.identity() 関数:アイデンティティ行列の生成をマスターしよう!


使い方

import numpy as np

# 3行3列のアイデンティティ行列を生成
I = np.matlib.identity(3)

print(I)

出力

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

引数

  • order: メモリ配置順序 ('C' または 'F')
  • dtype: 生成される行列のデータ型 (デフォルトはfloat64)
  • k: 対角線の位置 (デフォルトは0、主対角線)
  • n: アイデンティティ行列の行数と列数 (デフォルトは1)

詳細

  • order 引数を使用して、メモリ配置順序を指定できます。
  • dtype 引数を使用して、生成される行列のデータ型を指定できます。
  • k 引数を使用して、上側対角線または下側対角線に1を含むアイデンティティ行列を生成できます。

  • 5行5列の上側対角線に1を含むアイデンティティ行列を生成
I = np.matlib.identity(5, k=1)

print(I)
  • 3行3列の下側対角線に1を含むアイデンティティ行列を生成
I = np.matlib.identity(3, k=-1)

print(I)
  • 複素数型の2行2列のアイデンティティ行列を生成
I = np.matlib.identity(2, dtype=complex)

print(I)

応用例

  • 機械学習
  • データ分析
  • 行列演算
  • 線形代数計算
  • numpy.ones: 指定された形状の1行列を生成します
  • numpy.zeros: 指定された形状のゼロ行列を生成します
  • numpy.eye: 2つの引数を使用してアイデンティティ行列を生成します (行数と列数、または対角線の位置と行数)


import numpy as np

# 3行3列のアイデンティティ行列
I3 = np.matlib.identity(3)
print(I3)

# 5行5列のアイデンティティ行列
I5 = np.matlib.identity(5)
print(I5)

# 1行1列のアイデンティティ行列
I1 = np.matlib.identity(1)
print(I1)

例2:対角線の位置を変更

この例では、k 引数を使用して、アイデンティティ行列の対角線の位置を変更します。

import numpy as np

# 上側対角線に1を含む 3行3列のアイデンティティ行列
I_up = np.matlib.identity(3, k=1)
print(I_up)

# 下側対角線に1を含む 3行3列のアイデンティティ行列
I_down = np.matlib.identity(3, k=-1)
print(I_down)

例3:データ型を指定

この例では、dtype 引数を使用して、生成されるアイデンティティ行列のデータ型を指定します。

import numpy as np

# 複素数型の 2行2列のアイデンティティ行列
I_complex = np.matlib.identity(2, dtype=complex)
print(I_complex)

例4:メモリ配置順序を指定

この例では、order 引数を使用して、生成されるアイデンティティ行列のメモリ配置順序を指定します。

import numpy as np

# 'C' 順序の 3行3列のアイデンティティ行列
I_C = np.matlib.identity(3, order='C')
print(I_C)

# 'F' 順序の 3行3列のアイデンティティ行列
I_F = np.matlib.identity(3, order='F')
print(I_F)
  • より複雑な操作には、NumPy の他の行列操作関数と組み合わせて使用できます。
  • これらの例は、matlib.identity() 関数の基本的な使用方法を示しています。


numpy.eye() 関数

numpy.eye() 関数は、matlib.identity() 関数とほぼ同じ機能を提供しますが、2つの引数を使用してアイデンティティ行列を生成できます。

  • k: 対角線の位置 (デフォルトは0)
  • n: アイデンティティ行列の行数と列数

利点

  • 対角線の位置を簡単に指定できる
  • matlib.identity() 関数よりも簡潔な構文

欠点

  • データ型やメモリ配置順序を指定できない
  • matlib.identity() 関数と同じ機能しか提供しない


import numpy as np

# 3行3列のアイデンティティ行列を生成
I = np.eye(3)
print(I)

# 上側対角線に1を含む 3行3列のアイデンティティ行列を生成
I_up = np.eye(3, k=1)
print(I_up)

手動でループを使用して行列を生成

小さなアイデンティティ行列を生成する場合は、手動でループを使用して行列を生成する方法もあります。

利点

  • メモリ使用量を削減できる
  • コードをより詳細に制御できる

欠点

  • コードが読みづらくなる可能性がある
  • matlib.identity() 関数や numpy.eye() 関数よりも冗長


import numpy as np

def identity(n):
  """n 行 n 列のアイデンティティ行列を生成する

  Args:
    n: 行数と列数

  Returns:
    アイデンティティ行列
  """
  I = np.zeros((n, n))
  for i in range(n):
    I[i, i] = 1
  return I

# 3行3列のアイデンティティ行列を生成
I = identity(3)
print(I)

SciPy ライブラリを使用

SciPy ライブラリには、scipy.sparse.identity() 関数があり、疎行列のアイデンティティ行列を生成できます。

利点

  • 疎行列のアイデンティティ行列を効率的に生成できる

欠点

  • 稠密行列のアイデンティティ行列を生成するには、toarray() メソッドを使用して変換する必要がある
  • NumPy 標準ライブラリの一部ではないため、インストールする必要がある
import scipy.sparse as sp

# 3行3列の疎アイデンティティ行列を生成
I = sp.identity(3)
print(I.toarray())