2014-09-21 49 views

回答

0
C = [A(1,1):B(1,1);A(2,1):B(2,1)]; 
+0

我要爲成千上萬的做到這一點。所以這不是有效的方式 – user12331 2014-09-21 19:01:01

+0

那麼爲什麼不擴展你的問題多一點? – Justin 2014-09-21 20:51:49

0

試試:

C=[ A(1):1:B(1); A(2):1:B(2) ] 
1

您可以組合做到這一點使用arrayfuncell2mat這樣的:

A = 
    1  4  7 10 
B = 
    5  8 11 14 

cell2mat(arrayfun(@(n) (A(n):B(n)), 1:numel(A),'UniformOutput', false)') 
ans = 

    1  2  3  4  5 
    4  5  6  7  8 
    7  8  9 10 11 
    10 11 12 13 14 

可以縮短下來使用縮寫位爲UniformOutput,但我建議寫出來,因爲縮略語在將來的MATLAB版本中可能不再是明確的。查詢this question瞭解有關該主題的冗長討論。

+0

+1專門用於縮寫的警告 – 2014-09-21 22:19:15

1

您的問題隱含假設B(1)-A(1)等於B(2)-A(2)等;否則結果是不確定的。

你可以做到這一點相當普遍和有效的,如下所示:打造第一排,然後用bsxfun獲得所有其他行:

C = bsxfun(@plus, A(1):B(1), A(:)-A(1)); 
+1

顯然是最好的解決方案。我沒有進行基準測試(不需要真的),但我認爲這比arrayfun方法快了一個數量級。 – 2014-09-23 09:27:54