単一の1xNベクター(異なるサイズの)いくつかの行列を折りたたむことは非常に簡単です:単一の1xN行列に(異なるサイズの)いくつかの行列を変換し、再び
vec = [ A(:)', B(:)', C(:)' ];
...しかし、どのように他の方法、つまりvecからU、V、Wを回復することはできますか?
私はA、B、Cのサイズを収集できます。
sizes = [ size(A), size(B), size(C) ];
を...しかし、私は、リカバリを行うための任意のきれいな方法を参照することはできません。
k=0;
U = reshape(vec(k+1:k+Ay*Ax), Ay, Ax); k = k+Ay*Ax;
V = reshape(vec(k+1:k+By*Bx), By, Bx); k = k+By*Bx;
W = reshape(vec(k+1:k+Cy*Cx), Cy, Cx); k = k+Cy*Cx;
eeeeeyYUCK!確かにこれ以上のものがなければならないのですか?
EDIT:CST-リンクの質問に応えて、CST-リンク@、私は実際には7つのオブジェクトを持っているので、私は過度に汎用的である必要はありません。しかし私は実際に次の構造を扱っています:
A = ...; B = ...; C = ...; % only 7 mats
vec = pack(A,B,C);
ret = f(vec, g);
A_, B_, C_ = unpack(ret);
function ret = g(vec)
U, V, W = unpack(vec);
% fiddle U V W
ret = pack(U,V,W);
end
...そしてfはg(vec)を呼び出します。
インナーアンパックを実行するために、私は、7つのターゲット寸法を供給する必要があるので、私は、私は、別のparamようにそのデータを送信する必要がありますするつもりだと思います:
A = ...; B = ...; C = ...; % only 7 mats
vec = pack(A,B,C); sizes = getsizes(A,B,C);
ret = f(vec, g, sizes);
A_, B_, C_ = unpack(ret);
function ret = g(vec, sizes)
U, V, W = unpack(vec, sizes);
% fiddle U V W
ret = pack(U,V,W);
end
... unpack
関数はまだA、B、Cにアクセスすることができますが、実際にはその変数sizes
変数を使いこなすのが賢明ではありません。
一般的な解決法が必要なのか、それとも3つの行列だけが必要ですか? –
@ CST-Link、良い点、私は質問を編集しました。 –