[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:002393] Re: gpview, and max, min



竹広です. 

オジサンも四十の手習いでちょっと試してみました. 
where がヒットする場所が複数ある場合を想定してます. 
でもあってんのかな? 添字の付き方が 0 からの場合は
慣れてないので不安. だれか採点して. 

idx1d = gphys.val.eq(gphys.max).where

idx1d.each{|idx|
  idx_array = Array.new(rank,0)
  i=rank
  while i > 1 do
    i -= 1
    interval = 1
    shape[0..i-1].each{|dim|
      interval *= dim
    }
    idx_array[i], idx = idx.divmod(interval)
  end
  idx_array[0]=idx
  ...
}


> whereメソッドは多次元配列を一次元配列とおもった時の添え字を返すみたいな
> ので、ちょっと汚いですが、こんな感じで。。。
> 
> #いろいろ変数名がいまいちですが。
> 
>   idx = gp.val.eq(gp.max).where
>   shape = gp.shape
>   idx_array = Array.new
> 
>   (gp.shape.size - 1).times do |i|
>     shape.pop
>     num = 1
>     shape.each do |s|
>       num = num * s
>     end
>     idx_array.push( idx / num )
>     idx = idx - num * idx_array[-1]
>   end
>   idx_array.push( idx % shape[0] )
>   idx_array.reverse 
> 
> idx_arrayに各次元の添え字が入るはずです。
> 
> #15行もあるなぁ。もっと短くならないですかねぇ。