マトリックスとは何ですか?
m
列とn
行を持つ行列は、要素(または座標)を持つベクトル*を消費し、m
要素を持つベクトルを生成する関数を表しn
ます。
これから、行列が正方行列である場合にのみ、ベクトルの次元が変化しないことがわかります。例えば。3Dベクトルの変換から3Dベクトル、2Dから2Dなどを取得します。
*:物理学では、ベクトルは通常、速度や加速度などを「移動」する力やその他の「影響」を示すために使用されます。しかし、点または任意の数の配列を表すためにベクターを使用することを妨げるものは何もありません(一部のライブラリーおよびプログラミング言語は、「ベクター」を使用して「1D配列」を意味します)。行列で使用する場合、行列の要素が何であれ、それらを加算、減算、乗算する方法がある限り、何でもベクトルの要素(文字列または色さえ)にできます。したがって、名前のベクトル「キャリア」を意味し、 -それが運ぶか、保持しているあなたのための値を。
行列の乗算とはどういう意味ですか?
行列が関数の場合、どのような関数ですか?関数は何をしますか?そのためのレシピは、マトリックスの要素によって定義されます。input u
、output v
、matrix M
(乗算M*u=v
はf(u)=v
)と呼ばれu(i)
、i
thの要素u
(2番目の要素はy座標など)を呼び出します。マトリックスの場合、M(i,j)
row i
、columnを意味しますj
。
v(1)
結果の最初の要素であるelementの構築は、行列の最初の行で記述されます。u(1)
回M(1,1)
、プラスu(2)
時間M(1,2)
、...プラスu(i)
時間M(1,i)
。マトリックスは、非常に単純なプログラミング言語に少し似ています。これは、入力をシャッフルしたり、入力を追加するなどして機能するプログラミング関数にのみ適しています。**
一度に出力の1つの要素で作業しているため、一度に1行のマトリックスのみを使用していると想像しておくと役立ちます。u
水平に書きます。そのM
下のi行目を書きます。上/下のペアをすべて乗算し、以下の製品を記述してから、製品を合計します。すべての行について繰り返し、のすべての要素を取得しv
ます。(m
by n
マトリックスがm
ベクトルに作用してベクトルを生成しなければならない理由がわかりましたn
。)
これについて考える別の方法-3Dから3Dへの変換を行うとしましょう。3x3マトリックス(または、この「関数」を装うことができるため、よく呼ばれる3D変換は、実際には3Dポイントを「移動」することです)数字を変更するだけです)。最初の行がであるとしましょう[1 2 0]
。つまり、結果のxを取得するには、入力のxを1、入力のyを2、入力のzを0に設定します。それは本当にレシピです。
**:マトリックスがプログラミング言語である場合、チューリングも完全ではありません。
2つの行列を乗算するとはどういう意味ですか?
それらが両方とも適切なサイズの行列である場合、「A*B
最初に適用する関数」を意味します。サイズが入力と出力のサイズを決定し、1つのマトリックスが他のマトリックスの出力を消費するため、乗算のサイズに制約が存在する理由がわかります。乗算が関数の組み合わせを意味するのはなぜですか?それが必要であることに気付くのは簡単です。if がであり、かつである場合、then は、である、と同じです。B
A
A*u
f(u)
B*u
g(u)
f(g(u))
f(B*u)
A*(B*u)
同様に、同じ関数の繰り返し適用は、3回A*A*A
をA
表す関数の適用を意味するため、べき乗として表示できます。
マトリックスはどのように役立ちますか?
new_x = 1*x+2*y+0*z
(最初の行が[1 2 0]である場合)のような変換を行うのは何ですか?それはあまり明白ではありませんが、それを説明するために別の2Dマトリックスを見てみましょう。マトリックスは次のとおりです。
[ 0 1
1 0 ]
または[0 1; 1 0]
、便利なMatlab表記を使用します。このマトリックスは何をしますか?次のように2Dベクトルを変換します。結果のxに対して、入力のyの1を使用します。結果のyに対して、入力のxの1を使用します。入力のx座標とy座標を入れ替えました-この行列は、x = y線に関する点を反映しています。それは一種の便利です!拡張すると、SW - NE線に沿って1を持つすべての行列が反映されることがわかります。また、単位行列が入力を返す理由を確認できます(出力のxの場合は入力のxを、出力のyの場合は入力のyを取得...)。
これで、シンボルがなぜなのかがわかります。Xx
、Yx
-彼らはどのくらいの入力の意味X
、Y
などの出力になりますx
。
マトリックスは他にどのように役立ちますか?
他にどんな変換ができますか?単位行列を取得することでサイズを変更できますが、対角線に沿って1以外の数を使用します。たとえば[2.5 0; 0 22.5]
、入力のすべての座標に2.5を掛けます。このマトリックスを画像内のすべてのポイントに適用すると、画像は2.5倍になります。2.5を1つの行([2.5 0; 0 1]
)にのみ配置すると、x座標のみが乗算されるため、xに沿ってのみストレッチします。
他のマトリックスは、さまざまな程度の有用性を持つ「スキュー」などの他の変換を与えることができます。個人的には、行列は非常にシンプルに見えますが、変換自体は画像をマングルする以外のことをほとんど行わないため、スキューは私が最も好きではありません。便利なのは「回転」です-ポイントをどのように回転させるのですか?原点を中心に反時計回りに角度を(x, y)
回転させた後、ポイントの位置を計算してみてくださいtheta
。新しいx座標とy座標の両方が、古いxとyにシータのサインとコサインを掛けたものであることがわかります。この関数に対応するサインとコサインを使用して、回転行列を簡単に書くことができるはずです。
非正方行列では、入力の次元を変更することもできます。2D入力を3Dに変換することは、新しい座標に入れるものを「製造」するのが難しいため、あまり有用ではありませんが、3Dを2Dに変換することは非常に便利です。とりわけ、これはコンピューターが*** 3Dシーンを2D画像に投影してモニターに描画する方法です。
ベクトルはさまざまなものを保持できるため、文字列をシャッフルまたは「乗算」することで、一度にn文字の文字列を暗号化する行列を記述することもできます(乗算/加算関数を考え出す必要があります)。
***:投影するときに、彫刻のような3Dオブジェクトを撮影し、それに光を当てて、どのような2Dシャドウが壁に落ちるかを確認します。
行列の制限は何ですか?
すべての機能を行列で実行できますか?いいえ。グラフィカルに考えると、マトリックスではできなかったことを想像するのは困難です(ただし、それは存在します。たとえば、「渦巻き」効果は実行できません)。ただし、簡単な例を次に示します。関数f
がすべての要素がsquaredでf(u)
返されるようなものだとしましょう。マトリックスを書くことはできないことがわかります。マトリックスでは、座標に定数を掛けるレシピを記述する機能しかありません。パワーのような他の派手な関数は表現できません。u
****:これが線形代数と呼ばれる理由でもあります-べき関数は非線形で、プロットされたときに直線を作成しません。
4Dマトリックスの奇妙な余分な行
さて、なぜあなたの例のマトリックスは4×4ですか?これは4次元空間を意味しませんか?4Dコンピューターがないので、なぜですか?これは、実際には、線形演算に関する以前のポイントに関連するマトリックスを使用した興味深いトリックです。
マトリックスではどの機能を実行できないかについて:2Dポイントを2単位右に移動するためのマトリックスは何ですか(ポイントを生成します(x+2, y)
か?再び、行き詰まります。入力を乗算する方法はありますが、追加する方法はありません。 2D作業の場合、トリックは実際には2D空間ではなく3D空間にいるふりをすることです。ただし、すべての高さ(z座標または3番目の要素)は常に1です(2D宇宙のように少し似ています) 3Dユニバースの床に沿って平らに置かれた「プレート」-この場合、3番目の座標は常に0)。その後、この魔法の最後の座標を定数として使用できます。
同様に、3Dポイントを移動するには、4D座標が必要です。また、これが、表示されるすべての3D変換行列が[0 0 0 1]
最後の行として表示される理由でもあります。4次元を変更してはなりません。