CygwinのRubyからMatlabを扱う

とあるデータファイルがMatlabのフォーマット(*.mat)だったのですが、それをRubyから読み込めたらいいなぁ、という事態に遭遇しました。王道としてはMatlabを起動してデータファイルを読み込み、それをCSVフォーマットで吐き出させてRuby側で取り込めばいいと思います。しかし、それでは一次ファイルができてしまいクールではないので、Rubyから直接Matlabのファイルを扱えるようにしてみました。

といってもRubyにはMatlabを内部的に呼び出しデータ変換などを可能にしてくれるmatlab-rubyという便利なライブラリがあります。これを使えば解決、と思ったのは束の間、残念ながら僕が所有している環境ではうまくいきませんでした。僕の環境はWindowsのMatlab R2006b(ちょっと古いですね)とcygwinのRubyです。

ということで問題点を調べてmatlab-rubyにあてるパッチを作ってみました。matlab-ruby-2.0.3_cygwin.patch です。問題点としては、必要なヘッダのサーチパスが正しく設定されていなかったこと、Windows版Matlabには(そのままでは)cygwinのgccからリンクできるライブラリが添付されていないこと、この2つです。これらの問題がパッチをあてることで解消され、あとは通常のインストール方法に従うだけでインストールが完了します。
また、もしMatlabを標準("C:\Program Files\MATLAB")と違うディレクトリにインストールしているようでしたら、パッチ中のMATLAB_DIRを修正してください。

最後にcygwinのgccで読めるライブラリを作るにあたっては、『VC++用のDLLをCygwinで使う』がとても参考になりました。ありがとうございます。

※似たような内容で『Matlab mexでCygwin gccやg77を使う(gnumex)』という記事もあります。

※※ 2007aでも試してみました。そのままだと一部問題が発生しますので、パッチを当てた後にext/matlab_api/matlab_api_wrap.cを削除してからruby setup.rb configをしてください。そうすると当該ファイルの最新版が自動生成されてうまくいきます。

March 16, 2010 22:22 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

コメントする