Rewriting a vector addition and multiplication.
    4 views (last 30 days)
  
       Show older comments
    
Hello Friends,
I have the following:
A = [1 2 3; 4  5 6; 7 8 9];
B = [10 11 12; 13 14 15];
[N1, D1] = size(A);
[N2, D2] = size(B);
 A_sq = sum(A.^2, 2);
 B_sq = sum(B.^2, 2)';
D = A_sq(:,ones(1,N2)) + B_sq(ones(1,N1),:) - 2.*(A*B');
where D is N1 x D1 matrix.
I want to write expression for D in one single step, i.e., something like this:
   D = sum(A.^2,2)(:,ones(1,N2)) + sum(B.^2,2)(ones(1,N1),:) - 2.*(A*B');
or perhaps something like this is even better:
D = sum[(A.^2,2)(:,ones(1,N2)) + (B.^2,2)(ones(1,N1),:) - . . .];
I know that above expression is wrong because one needs to store sum in a temporary variable before indexing. However, it is just for illustration purpose that I want to write down this expression in one single step.
I will appreciate any advise.
0 Comments
Accepted Answer
  Thorsten
      
      
 on 16 Aug 2016
        
      Edited: Thorsten
      
      
 on 16 Aug 2016
  
      Repmat is your friend here:
D = repmat(sum(A.^2, 2), [1, N2]) + repmat(sum(B.^2, 2)', [N1, 1]) - 2*A*B';
or as a one-liner all together:
D = repmat(sum(A.^2, 2), [1, size(B, 1)]) + repmat(sum(B.^2, 2)', [size(A, 1), 1]) - 2*A*B';
More Answers (1)
See Also
Categories
				Find more on Creating and Concatenating Matrices in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

