這是很容易崩潰的幾個矩陣(不同尺寸的)合併爲一個1×N個向量:轉換多個矩陣(的不同大小)集成到一個1×N個矩陣,然後再返回
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!當然必須有比這更好的東西?
編輯:爲了應對CST-Link的問題,@ CST-Link的,我居然有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,好點,我編輯了這個問題。 –