annotate toolboxes/FullBNT-1.0.7/KPMtools/max_mult.m @ 0:cc4b1211e677 tip

initial commit to HG from Changeset: 646 (e263d8a21543) added further path and more save "camirversion.m"
author Daniel Wolff
date Fri, 19 Aug 2016 13:07:06 +0200
parents
children
rev   line source
Daniel@0 1 function y=max_mult(A,x)
Daniel@0 2 % MAX_MULT Like matrix multiplication, but sum gets replaced by max
Daniel@0 3 % function y=max_mult(A,x) y(i) = max_j A(i,j) x(j)
Daniel@0 4
Daniel@0 5 %X=ones(size(A,1),1) * x(:)'; % X(j,i) = x(i)
Daniel@0 6 %y=max(A.*X, [], 2);
Daniel@0 7
Daniel@0 8 % This is faster
Daniel@0 9 if size(x,2)==1
Daniel@0 10 X=x*ones(1,size(A,1)); % X(i,j) = x(i)
Daniel@0 11 y=max(A'.*X)';
Daniel@0 12 else
Daniel@0 13 %this works for arbitrarily sized A and x (but is ugly, and slower than above)
Daniel@0 14 X=repmat(x, [1 1 size(A,1)]);
Daniel@0 15 B=repmat(A, [1 1 size(x,2)]);
Daniel@0 16 C=permute(B,[2 3 1]);
Daniel@0 17 y=permute(max(C.*X),[3 2 1]);
Daniel@0 18 % this is even slower, as is using squeeze instead of permute
Daniel@0 19 % Y=permute(X, [3 1 2]);
Daniel@0 20 % y=permute(max(Y.*B, [], 2), [1 3 2]);
Daniel@0 21 end