mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - PyCall で Python ライブラリを使用!

[ プログラミング ] [ Python, Ruby ]

こんばんは。

Ruby で Python のライブラリを使用したいことがあると思います。

以下、 Ruby で Python ライブラリを使用する方法についての記録です。

0. 前提条件

  • LMDE 2 (Linux Mint Debian Edition 2; 64bit) での作業を想定。
  • Ruby 2.4.3 での作業を想定。
  • 使用する Python のバージョンは 2.7.9 を想定。
  • マシンに Python を複数インストールしていて、システム標準以外のバージョンの Python を使用する方法については不明。(要調査)

1. 準備

Python がインストールされていなければインストールしておく。(PyPI も)

2. RubyGem ライブラリ PyCall のインストール

1
$ sudo gem install --pre pycall

3. サンプルスクリプトの作成

例として、軌道要素(TLE)から人工衛星の位置/速度を計算するソーススクリプトを作成する。

pycall_sgp4.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#! /usr/local/bin/ruby

require 'pycall/import'
include PyCall::Import

pyfrom 'sgp4.earth_gravity', import: :wgs72
pyfrom 'sgp4.io', import: :twoline2rv

TLE_1 = "1 25544U 98067A   17293.55189421  .00016717  00000-0  10270-3 0  9004"
TLE_2 = "2 25544  51.6380 133.3720 0005197  35.8378 324.3123 15.54181626  1244"

satellite = twoline2rv(TLE_1, TLE_2, wgs72)
res = satellite.propagate(2017, 10, 21, 15, 44, 10)
position, velocity = res[0], res[1]
puts "ERROR:\n\t#{satellite.error}(#{satellite.error_message})"
puts "POSITION:\n\t#{position}"
puts "VOLOCITY:\n\t#{velocity}"

4. PyPI ライブラリのインストール

上記のサンプルソース内で使用する PyPI ライブラリ sgp4 をインストールする。

1
$ sudo pip install sgp4

5. サンプルスクリプトの実行

まず、実行権限を付与。

1
$ chmod +x pycall_sgp4.rb

そして、実行。

1
2
3
4
5
6
7
$ ./pycall_sgp4.rb
ERROR:
        0()
POSITION:
        (-4956.077785047007, 443.72256791453077, 4595.716324639249)
VOLOCITY:
        (2.197965467515399, -6.7082256206170685, 3.01223611957471)
  • TEME(True Equator, Mean Equinox; 赤道直角座標系)で結果を出力。
  • 位置の単位は km, 速度の単位は km/sec.

7. 参考サイト


Ruby から Python ライブラリが使用できれば、実現の難しかった Ruby での機械学習等に手軽に取り組めるでしょう。

以上。

Comments