1 概述
前段時間在搞一個工程,爲了達到某個指標,和同事討論竟然用到了矩陣的算法,越來越感覺矩陣的重要性了,這篇文章主要是某個工程開發過程中用到的算法,和android本身沒有關係
參考文章
Java調用jama實現矩陣運算
線性代數java包,Jama的常用方法
jama的官方API
2 詳細記錄
2.1 判定兩個矩陣是否完全相同
利用的數學原理就是:矩陣的秩等於0的充分必要條件是這個矩陣是零矩陣。
行列如果相同,就做減法
public static boolean IsMatrixEqual(Matrix amatrix, Matrix bmatrix) {
if(amatrix.getColumnDimension() == bmatrix.getColumnDimension() && amatrix.getRowDimension() == bmatrix.getRowDimension()) {
Matrix minus_matrix = amatrix.minus(bmatrix);
if (minus_matrix.rank() == 0) {
return true;
}
else
return false;
}
else
return false;
}
demo
double[][] vals = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}};
Matrix A = new Matrix(vals);
double[][] vals2 = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}};
Matrix B = new Matrix(vals2);
System.out.println(StackUtil.IsMatrixEqual(A,B));
2.2 java 字符串處理
2.2.1 統計字符串中某個字符的個數
參考Java中判斷某個String字符串是否包含特定字符串,並統計個數
String res="AAAAABBAAA";
String b="B";
int count=
(res.length()-res.replace(b,"").length())/b.length();
2.2.2 將字符串進行分割,轉化爲矩陣
(處理後可以用於機器學習的樣本)
public static Matrix CreateMatrixByStack(String[] str_array) {
int row_dimension = str_array.length;
int col_dimension = 0;
System.out.println("row_dimension :" + row_dimension);
List<Integer> colmu_index = new ArrayList<Integer>();
for(int i = 0; i < str_array.length; i ++ ) {
int colmu_index_len= str_array[i].length()-str_array[i].replace("X","").length() + 1;
colmu_index.add(colmu_index_len);
if(colmu_index_len > col_dimension) {
col_dimension = colmu_index_len;
}
}
System.out.println("col_dimension: " + col_dimension);
double[][] stack_val = new double[row_dimension][col_dimension];
for(int i = 0; i < row_dimension; i++) {
for(int j = 0; j < col_dimension; j++) {
if (j < colmu_index.get(i))
stack_val[i][j] = 1;
else
stack_val[i][j] = 0;
}
}
return new Matrix(stack_val);
}