2012年8月6日月曜日

MatlabのmatファイルをJavaで読み込み

なんらかの事情でMatlabで計算して、Matlabのフォーマットで出力したmatファイルの中のデータを読みたい場合。

そんなときには JMatIO というライブラリがある。BSDライセンスらしい。
例えば、以下のサイトから JMatIO_071005.zip を落としてみる。
http://sourceforge.jp/projects/sfnet_jmatio/

解凍すると lib フォルダの中に jmatio.jar があるから、eclipse で使う場合には、パッケージ名を右クリックして、
Build Path --> Add External Archives
にこの jar ファイルを指定すればいい。



さて、簡単な使い方。
まず、abc.mat というファイルがあったとして、abc.mat の中には、result という名前の行列(double型)が保存されてるとする。

MatFileReader のコンストラクタが IOException を投げる可能性があるので、try catchでくくって、

try{
  MatFileReader mfr = new MatFileReader(new File("abc.mat"));
  MLDouble array = (MLDouble)mfr.getMLArray("result");
  double[][] result = array.getArray();
}
catch(IOException ioe){
  ioe.printStackTrace();
}

とすると、double[][] result に行列データが代入される。
eclipse だと面倒見てくれるけど、

import com.jmatio.io.MatFileReader;
import com.jmatio.types.MLDouble;

をインポートしとくこと。

ちなみに、javadoc は解凍したフォルダの doc の中にあるけど、あんまり丁寧じゃない。

2012年8月3日金曜日

bashでループ

簡単だけどたまに使うから忘れる。そのメモ。

10回ループさせるとき。

for((i=0 ; i<10 ; i++))
do
  {処理}
done

bashで計算

まずは整数の計算。

a=5
b=-3
c=`expr $a + $b`

結果は2。


次は少数の場合。

a=5.6
b=-9.2
c=`echo "$a + $b" | bc`

結果は-3.6。

$a + $b のところは、"(ダブルクォート)でくくらなくてもOK。
ただし、'(シングルクォート)だとエラーが出る。シングルクォートは$を展開しないから。