-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathindex_nd.m
More file actions
34 lines (32 loc) · 991 Bytes
/
index_nd.m
File metadata and controls
34 lines (32 loc) · 991 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function result = index_nd(Dim, Kstart,Kend, sizes )
%
% result = index_nd(Dim, Kstart,Kend, sizes )
% similar to sub2ind, return linear index
% from n-dimensional subscripts
%
% Note
% Kstart(1:Dim), Kend(1:Dim), sizes(1:Dim)
% --------------------------------------------
if (Dim == 1),
K_start = Kstart(1);
K_end = Kend(1);
result = reshape( K_start:K_end, K_end-K_start+1,1);
else
Dimm1 = Dim-1;
res = index_nd( Dimm1, Kstart(1:Dimm1),Kend(1:Dimm1), sizes(1:Dimm1));
size_res = prod(size(res));
res = reshape( res, size_res,1);
K_start = Kstart(Dim);
K_end = Kend(Dim);
K_size = K_end - K_start + 1;
result = zeros( size_res * K_size,1);
lsize = prod(sizes(1:(Dim-1)));
for i=1:K_size,
i1 = (i-1)*size_res + 1;
i2 = i1 + size_res-1;
K_value = K_start + (i-1);
result( i1:i2 ) = res + (K_value - 1) * lsize;
end;
end;
return;
end