57159
少々変な質問をさせていただきます．

## アドバイスを主に伺いたいです．

プログラムの高速化をしたく，Rubyの標準ライブラリ`Array`から`Numo::NArray`に実装変更したいのですが，私の現在のRubyのプログラムが大規模でありまして，例えば，`aaa.rb`内で`Array`で定義した配列で様々な四則演算を行い，その結果を`bbb.rb`内のメソッドでまた四則演算を行ったりと複雑なプログラムです．  
そういったプログラムに対して一部の`Array`を`Numo::NArray`にそのまま実装変更したら大量のエラーが発生しそうで怖いです．

一部の`Array`を`Numo::NArray`にそのまま実装変更しても問題はないのでしょうか．  
`Array`と`Numo::NArray`は互換性はありますでしょうか．

かなり抽象的な質問であり，私がどのようなコードを書いているかにも依存する質問ですが，質問から汲み取れる範囲で良いのでご教授お願いします．
CC BY-SA 4.0
2019-07-26T04:52:33.527
56906
2019-08-04T09:20:08.663
2019-07-26T04:59:21.257
30173
30173
question
ruby
大規模なRubyのプログラムで使用しているArrayをNumo::NArrayに全て変更したい
`Numo::NArray`は高速な`Array`ではありません。したがって機械的な置き換えもできません。
CC BY-SA 4.0
2019-07-26T23:31:16.420
56927
2019-07-26T23:31:16.420
5793
56906
answer
Ruby/NArrayのファンです。  
NArrayに興味を持ってくれる人がいてとても嬉しいのです。

高速計算をしたいのですね。NArrayにはうってつけの課題ではないでしょうか。  
ただNArrayがRubyのArrayとは全然違うのも事実なので、ちょっとずつ変更していく必要があるでしょう。

```

    # Rubyの配列 → NArray
    na = Numo::DFloat.cast(array)
    
    # NArray → Rubyの配列
    ruby_array = na.to_a
    
```

と書けば相互変換できますので、少しずつ置き換えていきましょう。  
個人的な経験では、Rubyの配列とNArrayの相互変換はそれほど時間がかからず、  
計算の高速化の効果の方が高いです。

numo-linalg  
numo-gsl  
numo-fftw  
numo-ffte  
などの便利なライブラリもありますよ。

NArrayの全く初心者の方は以下のQiitaエントリーを一読してみてください。  
<https://qiita.com/kojix2/items/0bc5efda0f65e58693a0>

わからないことがあったらぜひGitHubのNArrayのissueに書き込んだり、

日本語がいいならSciRubyのSlackで質問することもできます。  
<https://sciruby-slack.herokuapp.com/>

よろしくおねがいします。
CC BY-SA 4.0
2019-08-04T09:20:08.663
57159
2019-08-04T09:20:08.663
32772
56906
answer