about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/KPMtools/max_mult.m
diff options
context:
space:
mode:
Diffstat (limited to 'sourcecodes/bnt-master/KPMtools/max_mult.m')
-rw-r--r--sourcecodes/bnt-master/KPMtools/max_mult.m21
1 files changed, 21 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/KPMtools/max_mult.m b/sourcecodes/bnt-master/KPMtools/max_mult.m
new file mode 100644
index 00000000..fab37e3a
--- /dev/null
+++ b/sourcecodes/bnt-master/KPMtools/max_mult.m
@@ -0,0 +1,21 @@
+function y=max_mult(A,x)
+% MAX_MULT Like matrix multiplication, but sum gets replaced by max
+% function y=max_mult(A,x) y(i) = max_j A(i,j) x(j)
+
+%X=ones(size(A,1),1) * x(:)'; % X(j,i) = x(i)
+%y=max(A.*X, [], 2);
+
+% This is faster
+if size(x,2)==1
+  X=x*ones(1,size(A,1)); % X(i,j) = x(i)
+  y=max(A'.*X)';
+else
+%this works for arbitrarily sized A and x (but is ugly, and slower than above)
+  X=repmat(x, [1 1 size(A,1)]);
+  B=repmat(A, [1 1 size(x,2)]);
+  C=permute(B,[2 3 1]);
+  y=permute(max(C.*X),[3 2 1]);
+%  this is even slower, as is using squeeze instead of permute
+%  Y=permute(X, [3 1 2]);
+%  y=permute(max(Y.*B, [], 2), [1 3 2]);
+end