3

可能重复:
MATLAB:差异矩阵

我不知道如何表达这个问题,但我会尽力而为:

我有两个向量,AB

我想A用每个单独的值减去所有值B

例如, 中的所有值A都减去 的第一个值B。然后所有的值A都减去 B 的第二个值,以此类推。

生成的矩阵应该length(A) x length(B)看起来像这样:

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

有没有办法在没有循环的情况下做到这一点?

4

2 回答 2

3

像@Memming 和@Jonas 这样的行说:

Result = bsxfun(@minus, a, b');
于 2012-11-17T15:51:05.980 回答
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
于 2012-11-17T15:10:26.937 回答