【初心者向け】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())