March 16, 2010

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をしてください。そうすると当該ファイルの最新版が自動生成されてうまくいきます。

22:22 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/742
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。