Pythonの数値計算ライブラリ「NumPy」をRubyで動かす

投稿者: | 2019年9月26日

こんにちは。
GMOアドマーケティングの石丸です。

以前こちらのブログで「OpenCVをRubyで動かす方法」について紹介させていただきました。

こんにちは。GMOアドマーケティング、16新卒エンジニアのT.Iです。今年4月に入社し、配属後の7月からは主にRuby on Railsを使った開発を行っていますが、学生の頃は画像…

 

今回は「◯◯をRubyで動かすシリーズ」の第二弾として、Pythonで行列計算やベクトルを扱う際に使うNumPy をRubyで動かす方法を紹介します。

環境構築

RubyでNumPyを動かすために、まずは環境を整えます。
※RubyやPythonの環境構築については割愛しますが、Pythonの環境構築方法によってはPyCallが動かない場合があるのでご注意下さい。

今回はこのGemを使ってREADMEに記載の通りに環境構築を行います。
このGemはPyCallで動作するRuby用のNumPyラッパーです。
2019/09/18時点では、PyCallはRubyはバージョン2.3以上、Pythonは2.7以上をサポートしています。

今回はGemfileに gem 'numpy' を追記して bundle install しました。
PyCallもインストールされたことが確認できます。

余談ですが、PyCallの詳細やRubyでのデータサイエンス事情についてはPyCallの開発者が執筆された以下の記事をご覧ください。

Ruby-Pythonブリッジライブラリ「PyCall」を使ってRubyでデータ分析をしよう!

実際に使ってみる

動作確認として簡単なコードを動かしてみます。
PythonでNumPyを動かす場合は import numpy as np のように書きますが、今回の環境では以下のように書きます。

特に違和感なく書けますね。
オブジェクトのクラスもNumPy用の配列 numpy.ndarray になっていることが確認できます。

他にもいろいろ試してみます。

行列の基本操作

NumPyを使ったことがある場合はそのままの知識で書くことができますね。
せっかくPyCallの環境があるので、Matplotlibを使ってグラフも描画してみます。

無事に描画されました。
Matplotlibも何も違和感なく書くことができました。
強いて言えばPythonを書いてる感覚と同じなので、生のPythonで書くこととの差別化が難しいところです。
Rubyで作られたプロジェクトとPyCallで作ったデータ処理系うまく連携させることで価値が見えてくるかもしれません。

 

さいごに

今回はNumPyのGem(≒PyCall)を使ってRubyでNumPyを動かす方法について紹介しました。
Rubyで機械学習を行うアプローチは他にもたくさんあるので、何か面白いものがあればこちらのブログで紹介させていただきます。

参考リンク

NumPy
mrkn/numpy.rb: Numpy wrapper for Ruby
mrkn/pycall.rb: Calling Python functions from the Ruby language