Java常用库总结(程序更新)

由于目前在学习统计机器学习这本书,首先学习研究学习了常用的相似性度量 及 java和python实现计算,详见http://blog.csdn.net/qq_36603091/article/details/78216124

在学习第一感受就是python真是太好了!!!!

而java太繁琐,但是没办法公司项目还是要java  没办法 还是要用java!!!!

在求解马氏距离的时候需要用到矩阵的计算,那刚开始接触了jama

一、jama简介

Jama是一个基本的线性代数java包。包括一个基本的Matrix类和5个矩阵分解类。

Matrix类提供了基本的线性代数数值运算的功能,不同的构造函数可以构造双精度和浮点精度的二维数组,而不同的gets和sets方法可以返回子矩阵和矩阵元素。

官方文档:http://math.nist.gov/javanumerics/jama/doc/

math3简介

math3是Apache下的一款进行数学计算的一款java开源工具。jar包名称为:commons-math3.jar。大家可以通过maven或者其他网站进行下载。

math3是一款非常好用的工具,里面提供了各种运算的方法及类,方便大家调用。其API文档为:http://commons.apache.org/proper/commons-math/javadocs/api-3.2/index.html。可以参照API文档进行学习,也可以在实战中,进行学习。

数组转化为矩阵,矩阵的逆,矩阵的转置,矩阵的乘法,矩阵转为数组等等  非常方便  貌似没发现jama有矩阵转数组的 功能。

package aa;

import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.DecompositionSolver;
import org.apache.commons.math3.linear.LUDecomposition;
import org.apache.commons.math3.linear.MatrixUtils;
import org.apache.commons.math3.linear.RealMatrix;
import org.apache.commons.math3.stat.descriptive.moment.Mean;

public class Math {
	@SuppressWarnings("unused")
	public static void main(String[] args) {
	//double[]数组转换为矩阵
	
	double[] x0={10,2,3};
	double[] x1={-1,30,1.0};
	double[] x2={200,200,5000};
	double[] x3={3000,1000,1000};
	double[][] x = {{10,2,3},{-1,30,1.0},{200,200,5000}};
	RealMatrix matrix0 = new Array2DRowRealMatrix(x0);
	RealMatrix matrix1 = new Array2DRowRealMatrix(x1);
	RealMatrix matrix2 = new Array2DRowRealMatrix(x2); 
	RealMatrix matrix3= new Array2DRowRealMatrix(x3);
	RealMatrix matrix= new Array2DRowRealMatrix(x);
	RealMatrix inverseMatrix =inverseMatrix(matrix);//矩阵求逆
	System.out.println(inverseMatrix);
	RealMatrix combinedCol =combinedCol(matrix1,matrix2);
	System.out.println(combinedCol);
	RealMatrix combinedRow =combinedRow(matrix1,matrix2);
	System.out.println(combinedRow);
	RealMatrix meanRow = meanRow(matrix);
	RealMatrix mean = mean(matrix);
	System.out.println(meanRow);
	System.out.println(mean);
	//矩阵相乘、获取返回的第一列数据
	
		RealMatrix pMatrix = matrix;//matrix和matrix2相乘
		System.out.println(pMatrix);
		double[] y = pMatrix.scalarMultiply(1/1).getColumn(0);//获取到第一列  
		for (int i = 0; i < y.length; i++) {  
		    System.out.println(y[i]);  
		}
	}
	//矩阵求逆

	public static RealMatrix inverseMatrix(RealMatrix matrix) {  
	     LUDecomposition LUDe = new LUDecomposition(matrix);  
	     DecompositionSolver solver = LUDe.getSolver();  
	     RealMatrix result = solver.getInverse();  
	     return result;  
	}  
	//按列合并矩阵[a/b]
	
	public static RealMatrix combinedCol(RealMatrix a, RealMatrix b) {  
	     int col = a.getColumnDimension() + b.getColumnDimension();  
	     int row = a.getRowDimension();  
	     RealMatrix result = MatrixUtils.createRealMatrix(row, col);  
	     int temp = a.getColumnDimension();  
	     for (int i = 0; i < col; i++) {  
	         if (i < a.getColumnDimension()) {  
	             for (int j = 0; j < row; j++) {  
	                 result.setEntry(j, i, a.getEntry(j, i));  
	             }  
	         } else {  
	             for (int j = 0; j < row; j++) {  
	                 result.setEntry(j, i, b.getEntry(j, i - temp));  
	             }  
	         }  
	     }  
	     return result;  
	}  
	//按行合并矩阵[a,b]

	public static RealMatrix combinedRow(RealMatrix a, RealMatrix b) {  
	     int col = a.getColumnDimension();  
	     int row = a.getRowDimension() + b.getRowDimension();  
	     int temp = a.getRowDimension();  
	     RealMatrix result = MatrixUtils.createRealMatrix(row, col);  
	     for (int i = 0; i < row; i++) {  
	         if (i < a.getRowDimension()) {  
	             for (int j = 0; j < col; j++) {  
	                 result.setEntry(i, j, a.getEntry(i, j));  
	             }  
	         } else {  
	             for (int j = 0; j < col; j++) {  
	                 result.setEntry(i, j, b.getEntry(i - temp, j));  
	             }  
	         }  
	     }  
	     return result;  
	}  
	//返回各列平均值1*col

	public static RealMatrix mean(RealMatrix a) {  
	     int col = a.getColumnDimension();  
	     double[] data = new double[col];  
	     for (int i = 0; i < col; i++) {  
	         data[i] = new Mean().evaluate(a.getColumn(i));  
	     }  
	     RealMatrix result = MatrixUtils.createRowRealMatrix(data);  
	     return result;  
	}  
	//返回各行平均值row*1
	
	public static RealMatrix meanRow(RealMatrix a) {  
	     int row = a.getRowDimension();  
	     double[] data = new double[row];  
	     for (int i = 0; i < row; i++) {  
	         data[i] = new Mean().evaluate(a.getRow(i));  
	     }  
	     RealMatrix result = MatrixUtils.createRowRealMatrix(data);  
	     return result;  
	}  
	//获取指定列的元素
	
	public static RealMatrix getColMatrix(RealMatrix absMatrix) {  
	     RealMatrix a = absMatrix.getColumnMatrix(1);//此处的1指第二列  
	     return a;  
	}   

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值