NArray の coerce
現在、研究で NArray を使わせていただいているのだが、
$ irb --simple-prompt -r narray >> a = NArray.float(4).indgen! => NArray.float(4): [ 0.0, 1.0, 2.0, 3.0 ] >> b = NArray.int(4).indgen! => NArray.int(4): [ 0, 1, 2, 3 ] >> (a + b) / 2.0 => NArray.float(4): [ 0.0, 1.0, 2.0, 3.0 ] >> (b + b) / 2.0 => NArray.int(4): [ 0, 1, 2, 3 ]
はまった。NArray.int に対して Float の演算をしたとき、結果は NArray.float にならない。上記の最後の演算においても NArray.float になると思っていたので計算が合わなかった。Fixnum と Float の演算なら
>> (1 + 1) / 2.0 => 1.0
という変換が行われるので、やや NArray が直感とずれているようにも。以前作者の方に同様の変換に関する件でおかしいと思ったのでメールしてみたところすぐに対応して頂けたのだが、今回のケースはバグというわけでもなく、仕様という考えもできる。しかもこのような使い方は稀なケースと思われるのであまり問題ではないかもしれない。
実際僕の場合も手抜きで NArray[1.0, 2.0] とせずに NArray[1, 2] のような書き方をしてしまっていたので本来は最初から NArray.float を作っておきべきだった。