2012-11-17 2 views
3

가능한 중복 : 나는 두 벡터가빼기 두 벡터

:
MATLAB: Matrix of differences

나는 최선을 다하겠습니다 어떻게 말씀이 질문에 있지만 확실하지 않다 , 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

어제 나는 똑같은 질문에 * 정확하게 대답했다. [Here] (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