 ֥åڤФΤΥ르ꥺ(Ƽ˥ǥå
   )

η [5,3,2] äȤ

@stride = [1,5,5*3]
@dimmap = [1st dim's mapping, 2nd dim's mapping, 3rd dim's mapping]

@dimmap[i].indices  i Υǥå֤Ȥ롣
ȡŪˤϿˤ [i0,i1,i2] ܤΥǡΡ
ȤΣDˤ֤ (i?=0..@dimmap[?].length-1)

   @dimmap[0].indices[i0]*@stride[0]
 + @dimmap[1].indices[i1]*@stride[1]
 + @dimmap[2].indices[i2]*@stride[2] 

Ȥʤ롣 @stride[0] ϾˣǤ롣

äƤ⤷⤳롼פǲ󤹤ʤ顢

for i2 in 0..@dimmap[i2].length-1
  for i1 in 0..@dimmap[i1].length-1
    for i0 in 0..@dimmap[i0].length-1
      newdata[i0+newstride[1]*i1+newstride[1]*i2] =
                     @data[ @dimmap[0].indices[i0]*@stride[0] +
		     @dimmap[1].indices[i1]*@stride[1] +
		     @dimmap[2].indices[i2]*@stride[2] ]
    end
  end
end

Ȥʤ롣¿ť롼פ򲿼ξǤбǤ褦ˣť롼ײ
ȰʲΤ褦ˤʤϤ̤ǧˡ

CASE1:

for i in 0..@dimmap.length-1
  idx=0
  for d in 0..newrank
    j=(i/@newstride[d]).reminder(@dimmap[d].length)
    idx += @dimmap[d].indices[j]*@stride[d]
  end
  newdata[i]=@data[idx]
end

ǤiˤĤƤγ¦롼פŪĹdˤĤƤ¦롼פû
ξԤϸԲǽǤ롣Υ르ꥺC˰ܿƥ٥
׻˻ȡ¦롼פϥ٥ȥ벽¦ޤǥ٥
ȥ벽ڤ֤ȤϴԤˤȻפξ硢ǤϸΨ

嵭Τ褦˥롼פ󤷤ǰİĤˤĤڤФΤжˤˡϡ
@data ڼѤΰ켡ǥåޤˡǤ롣 
indices  BasicNumArray (ޤNumArray) ֤ȤȰʲΤ褦˼
롣

CASE2:

indx=@dimmap[0].indices
for d in 1..@dimmap.length-1
  current_indx=indx.dup
  for j in 0..@dimmap[d].length-1
    indx[(@stridenew[d]*j)..(@stridenew[d]*(j+1)-1)] =
      current_indx + @stride[d]*@dimmap[d].indices[j]
  end
end
newdata=data.indices(*indx)

Ǥ indx ϾĹʤäƤ㤨 3x3x3 
Ƽ [0,1],[1,2],[2,0,1] ǤڼϰʲΤ褦ˤʤ롣

  @stride=[1,3,9]      #(@stride[0]=1; @stride[i]=shape[i-1]*@stride[i-1])
  @stridenew=[1,2,4]   #(Ʊ)

 1(indx=@dimmap[0].indices)η̡
  indx = [0,1]      
 d=1ˤ
   j=0: indx =  [0,1] + @stride[1]*1  (Ǹ 1  @dimmap[1].indices[0])
   j=1:         [0,1] + @stride[1]*2   concat 
  ==> indx = [3,4,6,7]
 d=2ˤ
   j=0: indx =  [3,4,6,7] + @stride[2]*2
   j=1:         [3,4,6,7] + @stride[2]*0  concat 
   j=2:         [3,4,6,7] + @stride[2]*1  concat 
  ==> indx = [21,22,24,25, 3,4,6,7, 12,13,15,16]


CASE2 ϣť롼פǤ뤬롼פ󤹲ڤФΤ礭Ƥ
롼פ󤹲ϾϤǤʿη [l1,l2,l3] Ȥȡ
CASE1γ¦롼פ l1*l2*l3 ʤΤФơCASE2⳰롼פ̤ 
l2+l3 ǤˡʤCASE2α黻١٥ȥ벽
Τϳμ¤Ǥ롣Ǹ newdata=data.indices(*indx) ʬ
٥ȥ벽ʤС l1*l2*l3 롼פޤ魯Ȥˤʤ롣
ǥåͿ硢ʣ index Ϳ˾Ū
ʣʤ Fortran90 ʤ餽ʤ˥٥ȥ벽줽CǤϤɤ
 Ȥꤢѥ顼쥯ƥ֤ɬפǤ

