2012-11-17 35 views
3

可能重複:
MATLAB: Matrix of differences在Matlab減法兩個向量

我不知道我怎樣字這個問題,但會盡我所能:

我有兩個向量,AB

我想用B的每個單獨的值減去A中的所有值。

例如,將A中的所有值都減去B的第一個值。然後將所有A的值減去B的第二個值,以此類推。

得到的矩陣應該是length(A) x length(B)和看起來像這樣:

Ans = [A - B(1); A - B(2); A - B(3); ....... ]

是否有這樣做沒有環的方法嗎?

+0

鏈接的副本從A'''減去A'。從'A'減去'B'應該很容易理解。 – Jonas

+1

昨天我回答了*確切地說*對同一個問題付出了努力。 [這裏](http://stackoverflow.com/a/13422675/1714661)。 – Acorbe

回答

3

像@Memming和@Jonas行說:

Result = bsxfun(@minus, a, b'); 
+0

感謝他的優化。它更快。 – gtdevel

2
a=[2 3 4];  %first take two vector a and b of any size 
b=[5 6 5 7]; 
m=size(a);  % Then Calculate the size of the vectors 
n=size(b); 
r1=a'*ones(n); % replicate the vector a and b one can use **repmat** here for replication 
r2=ones(m)'*b; % like **repmat(a',n) & repmat(b,m(end),1)** 
Result=r1-r2 

Result = 

    -3 -4 -3 -5 
    -2 -3 -2 -4 
    -1 -2 -1 -3 
+3

'bsxfun'更快。 – Memming

+0

@Memming ...和更高的內存效率 – dinkelk

+0

bsxfun不允許使用'sym'聲明的變量。 – oak