【Java學習】使用Java 計算矩陣

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);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章