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 を作っておきべきだった。