線形変換の基本概念、数学的な定義、行列を用いた表現、応用例について解説します。
数学やデータサイエンスの分野で重要な概念の一つに 線形変換(Linear Transformation) があります。
線形変換は、座標系の回転、拡大・縮小、シアー変換(せん断)などの操作を表現するために使用されます。
線形変換の考え方は、画像処理、コンピュータグラフィックス(CG)、機械学習、物理シミュレーションなど、多くの応用分野で重要です。
例えば、画像のリサイズや回転、3D グラフィックスのオブジェクトの移動やスケール調整、ニューラルネットワークにおける重み行列の適用なども線形変換の一種です。
本記事では、線形変換の基本概念、数学的な定義、行列を用いた表現、計算方法、具体例について詳しく解説し、Python を使った可視化を通じて、直感的に理解できるようにします。
線形変換とは、あるベクトル空間の要素(ベクトル)を別のベクトル空間の要素に 線形性を保ったまま変換する関数 です。
数学的には、以下の 2 つの条件を満たす関数 を線形変換と呼びます。
ここで、 はベクトル、 はスカラー(実数)です。
この 2 つの性質により、線形変換は行列を使って簡潔に表現できるため、計算がしやすくなります。
線形変換は 行列とベクトルの積 として計算されます。以下では、2 次元平面での変換を具体的に見ていきます。
例えば、2D ベクトル に回転行列を適用 する場合を考えます。
この行列をベクトルにかけると、次のような計算になります。
計算の展開:
このように、各成分の計算は行列の各行とベクトルのドット積(内積)として計算されます。
ベクトルの長さを変更する変換で、行列 は次のようになります。
が拡大・縮小の倍率を表します。
ベクトルを 平行四辺形状に歪ませる 変換。
ここで、 はせん断係数です。
以下の Python コードを使用して、元のベクトルと線形変換後のベクトルの変化を視覚化することができます。
PYTHONimport numpy as np import matplotlib.pyplot as plt # 元のベクトルを定義(複数のベクトル) vectors = np.array([ [1, 2], # (1,2) のベクトル [3, 1], # (3,1) のベクトル [-1, -2], # (-1,-2) のベクトル [-2, 1] # (-2,1) のベクトル ]) # 変換行列の定義(回転 + 拡大縮小) theta = np.pi / 6 # 30 度の回転(ラジアン単位) scale_x, scale_y = 1.5, 0.8 # X 軸方向に 1.5 倍、Y 軸方向に 0.8 倍のスケーリング # 回転と拡大縮小を含む線形変換行列の作成 transformation_matrix = np.array([ [scale_x * np.cos(theta), -scale_x * np.sin(theta)], # X 成分 [scale_y * np.sin(theta), scale_y * np.cos(theta)] # Y 成分 ]) # 線形変換の適用(行列積を計算) transformed_vectors = np.dot(vectors, transformation_matrix.T) # グラフの設定 fig, ax = plt.subplots(figsize=(6, 6)) # 図のサイズを 6x6 に設定 ax.axhline(0, color='black', linewidth=0.5) # X 軸を描画 ax.axvline(0, color='black', linewidth=0.5) # Y 軸を描画 ax.set_xlim(-4, 4) # X 軸の範囲 ax.set_ylim(-4, 4) # Y 軸の範囲 ax.grid(True, linestyle="--", linewidth=0.5) # グリッドを表示 # 元のベクトルをプロット(青色で表示) for v in vectors: ax.quiver(0, 0, v[0], v[1], angles='xy', scale_units='xy', scale=1, color='blue', alpha=0.6) # 変換後のベクトルをプロット(赤色で表示) for v in transformed_vectors: ax.quiver(0, 0, v[0], v[1], angles='xy', scale_units='xy', scale=1, color='red', alpha=0.8) # グラフのタイトルを設定 ax.set_title("Original vs Transformed Vectors") # グラフを表示 plt.show()
このコードには、線形変換(回転 + 拡大縮小)を適用するための詳細なコメントを追加しました。
ax.quiver()
を用いて ベクトルを原点から描画 し、線形変換の影響を可視化しています。線形変換は数学的な概念として重要であり、現実世界の多くの技術に組み込まれています。
回 | タイトル | リンク |
---|---|---|
第 1 回 | 数学における「線形」とは? | 詳 細 |
第 2 回 | 「ベクトル」と「行列」の違い | 詳 細 |
第 3 回 | 「行列積(ドット積)」について | 詳 細 |
第 4 回 | 「クロス積(外積)」について | 詳 細 |
第 5 回 | 「ドット積」と「クロス積」の比較 | 詳 細 |
第 6 回 | 線形代数における「直交」 | 詳 細 |
第 7 回 | 「線形変換」について | この記事 |
第 8 回 | 「逆行列」について | 詳 細 |
第 9 回 | 「行列式」について | 詳 細 |
第 10 回 | 「固有ベクトル」と「固有値」 | 詳 細 |
当サイトの情報は、一般的な参考情報として提供しております。
正確な情報の掲載に努めておりますが、その内容の正確性・完全性・最新性を保証するものではありません。
記事の内容をご利用の際は、ご自身の責任において判断し、必要に応じて専門家にご相談ください。
当サイトの情報の利用により生じたいかなる損害についても、一切の責任を負いかねますのでご了承ください。
※ 本ページでは、著作権法に基づき、適正な引用の範囲内でコンテンツを紹介しています。
オリジナルの情報は発信元をご確認ください。
もし問題がありましたら、こちら からお問い合わせください。