matthiasm@8: function y=max_mult(A,x) matthiasm@8: % MAX_MULT Like matrix multiplication, but sum gets replaced by max matthiasm@8: % function y=max_mult(A,x) y(i) = max_j A(i,j) x(j) matthiasm@8: matthiasm@8: %X=ones(size(A,1),1) * x(:)'; % X(j,i) = x(i) matthiasm@8: %y=max(A.*X, [], 2); matthiasm@8: matthiasm@8: % This is faster matthiasm@8: if size(x,2)==1 matthiasm@8: X=x*ones(1,size(A,1)); % X(i,j) = x(i) matthiasm@8: y=max(A'.*X)'; matthiasm@8: else matthiasm@8: %this works for arbitrarily sized A and x (but is ugly, and slower than above) matthiasm@8: X=repmat(x, [1 1 size(A,1)]); matthiasm@8: B=repmat(A, [1 1 size(x,2)]); matthiasm@8: C=permute(B,[2 3 1]); matthiasm@8: y=permute(max(C.*X),[3 2 1]); matthiasm@8: % this is even slower, as is using squeeze instead of permute matthiasm@8: % Y=permute(X, [3 1 2]); matthiasm@8: % y=permute(max(Y.*B, [], 2), [1 3 2]); matthiasm@8: end