可能重复:
MATLAB:差异矩阵
我不知道如何表达这个问题,但我会尽力而为:
我有两个向量,A
和B
。
我想A
用每个单独的值减去所有值B
。
例如, 中的所有值A
都减去 的第一个值B
。然后所有的值A
都减去 B 的第二个值,以此类推。
生成的矩阵应该length(A) x length(B)
看起来像这样:
Ans = [A - B(1); A - B(2); A - B(3); ....... ]
有没有办法在没有循环的情况下做到这一点?
可能重复:
MATLAB:差异矩阵
我不知道如何表达这个问题,但我会尽力而为:
我有两个向量,A
和B
。
我想A
用每个单独的值减去所有值B
。
例如, 中的所有值A
都减去 的第一个值B
。然后所有的值A
都减去 B 的第二个值,以此类推。
生成的矩阵应该length(A) x length(B)
看起来像这样:
Ans = [A - B(1); A - B(2); A - B(3); ....... ]
有没有办法在没有循环的情况下做到这一点?
像@Memming 和@Jonas 这样的行说:
Result = bsxfun(@minus, a, b');
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