行列の次元を複製する簡単な方法を見つけましたが、理解できません:
A=[1,2;3,4]
A1=repmat(A,[1 1 2]);
戻り値
A1(:,:,1)=[1 2; 3 4 ]
A1(:,:,2)=[1 2; 3 4]
そして、私がこれを行うと
A2=A(:,:,[1 1])
まったく同じ結果が返されます。誰かがこの2番目の方法がどのように、そしてなぜ機能するのか説明できますか?
より簡単な例を見てみましょう:
A = [1,2,3,4,5]*10;
などに同意していただけると思いますがA(1) = 10
、リターンA(2) = 20
などのインデックスのベクトルを使用して行列をアドレス指定することもできますが、インデックスを繰り返すこともでき、同じ要素を 2 回アドレス指定するだけです。A([1,3])
[10,30]
A([1,1])
[10,10]
次に、ディメンションを追加しましょう。
A = [1,2,3;
4,5,6;
7,8,9]*10;
を返しA(1,:)
ます[10,20,30]
。しかし、A([1,1], :) はどうでしょうか? 最初の行が 2 回返されます。そう[10,20,30;10,20,30]
しかし、三次元はどうですか?A
は 3x3 の 2D 行列ですよね? はい。ただし、3x3x1 の 3D マトリックスでもあります。つまりA == A(:,:,1)
、上記A(:,:,[1,1])
と同じロジックにより、その 3 番目の次元が 2 回返されるため、 と同じになりrepmat(A, [1,1,2])
ます。