about summary refs log tree commit diff
path: root/sourcecodes/bnt-master/KPMtools/ind2subvMinka.m
diff options
context:
space:
mode:
Diffstat (limited to 'sourcecodes/bnt-master/KPMtools/ind2subvMinka.m')
-rw-r--r--sourcecodes/bnt-master/KPMtools/ind2subvMinka.m23
1 files changed, 23 insertions, 0 deletions
diff --git a/sourcecodes/bnt-master/KPMtools/ind2subvMinka.m b/sourcecodes/bnt-master/KPMtools/ind2subvMinka.m
new file mode 100644
index 00000000..4f2bcbef
--- /dev/null
+++ b/sourcecodes/bnt-master/KPMtools/ind2subvMinka.m
@@ -0,0 +1,23 @@
+function sub = ind2subvMinka(siz,index)
+%IND2SUBV   Subscript vector from linear index.
+% IND2SUBV(SIZ,IND) returns a vector of the equivalent subscript values 
+% corresponding to a single index into an array of size SIZ.
+% If IND is a vector, then the result is a matrix, with subscript vectors
+% as rows.
+
+% Written by Tom Minka
+% (c) Microsoft Corporation. All rights reserved.
+
+n = length(siz);
+if n==0, sub = index; return; end % added by KPM 17 Nov 07
+cum_size = cumprod(siz(:)');
+prev_cum_size = [1 cum_size(1:end-1)];
+index = index(:) - 1;
+sub = rem(repmat(index,1,n),repmat(cum_size,length(index),1));
+sub = floor(sub ./ repmat(prev_cum_size,length(index),1))+1;
+
+% slow way
+%for dim = n:-1:1
+%  sub(:,dim) = floor(index/cum_size(dim))+1;
+%  index = rem(index,cum_size(dim));
+%end