1)首先使用jmatio(v0.2)从.mat文件读取数据到内存中,并将其转化为二维数组的形式。
import com.jmatio.io.MatFileReader; import com.jmatio.types.MLArray; import com.jmatio.types.MLDouble; MatFileReader read = new MatFileReader("data/totalDataSet.mat"); MLArray mlArray=read.getMLArray("img");//mat存储的就是img矩阵变量的内容 MLDouble d=(MLDouble)mlArray; double[][] matrix=(d.getArray());//只有jmatio v0.2版本中才有d.getArray方法
2)ujmp的矩阵可视化功能很棒,将二维数组matrix转化为ujmp下的Matrix只需要一行代码:
import org.ujmp.core.Matrix; Matrix X=Matrix.Factory.importFromArray(matrix);//将二维数组转化为矩阵 X.showGUI();
3)相对于jama、ujmp,jblas的矩阵运算速度是很快的,可以将ujmp下的Matrix转化为jblas下的矩阵变量:
float[][] array=X.toFloatArray();//ujmp下的Matrix转化为二维数组 FloatMatrix jblasMatrix=new Float(array);
当然,也可以将jblas下的Matrix转化为ujmp下的matrix,中间接口就是二维数组。
4)
jmatio v0.2的文档:http://www.mathworks.com/matlabcentral/mlc-downloads/downloads/submissions/10759/versions/1/previews/doc/overview-summary.html。
jblas的官网和文档:
文档:http://jblas.org/javadoc/index.html
ujmp官网:https://ujmp.org/
Jama:
http://math.nist.gov/javanumerics/jama/doc/
5)最后附上java各科学计算库的评测,其实java矩阵计算的性能不太好。
http://lessthanoptimal.github.io/Java-Matrix-Benchmark/runtime/2013_10_Corei7v2600/