Posted on 2017/08/14, 11:40 AM By admin22
機械学習といえぱPython、ということが定着して、Rubyがこのジャンルではちょっと肩身の狭い思いをしているとのことですが、Rubyのライブラリがないのなら、PythonのライブラリをRubyから呼び出せばいいというPyCallを使った試みをいろいろと見つけたので、私も試してみました。
PyCall
https://github.com/mrkn/pycall
参考: http://qiita.com/mix_dvd/items/2161278cd996a0ed90a3
基本的にPythonでやれることはPythonでやればいいという考え方ですが、Rubyのデータを表示しょうとしたときに、PythonのMatplotlibのようなものが簡単に使えるのはとても便利に感じました。
環境: Python 2.7.12, Ruby 2.3.1p112 / Ubuntu 16.04
(pythonでnumpyとmatplotlibが使える状態にしておきます)
sudo gem install –pre pycall
sudo gem install ffi
ffiライブラリは古いものだと、エラーが出たのでアップデートしました。(ffi-1.9.18.gem)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
require 'pycall/import' include PyCall::Import pyimport 'numpy', as: 'np' pyimport 'matplotlib.pyplot', as: 'plt' x = np.arange.(-np.pi, np.pi,0.1) s = np.sin.(x) c = np.cos.(x) plt.subplot.(2,2,1) plt.plot.(x,s) plt.plot.(x,c) plt.xlim.(-np.pi, np.pi) plt.ylim.(-1.1, 1.1) plt.subplot.(2,2,2) plt.imshow.(np.random.randn.(300,300)) plt.subplot.(2,2,3) rx = np.random.randn.(50) ry = np.random.randn.(50) plt.plot.(rx,ry, "o") plt.subplot.(2,2,4) plt.hist.(np.random.randn.(1000)) plt.show.() |
関数呼び出しのところでドットを挿入するところが、ちょっと間違えやすいですが、まったく同じコードになります。
念のためPythonのコードでも確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import numpy as np import matplotlib.pyplot as plt x = np.arange(-np.pi, np.pi,0.1) s = np.sin(x) c = np.cos(x) plt.subplot(2,2,1) plt.plot(x,s) plt.plot(x,c) plt.xlim(-np.pi, np.pi) plt.ylim(-1.1, 1.1) plt.subplot(2,2,2) plt.imshow(np.random.randn(300,300)) plt.subplot(2,2,3) rx = np.random.randn(50) ry = np.random.randn(50) plt.plot(rx,ry, "o") plt.subplot(2,2,4) plt.hist(np.random.randn(1000)) plt.show() |
すばらいライブラリです!
Categories: 未分類 タグ: Machine Learning, Python, ruby