1. 程式人生 > >java 矩陣相乘 矩陣相加/相減 陣列相乘 陣列相減 資料轉置等函式

java 矩陣相乘 矩陣相加/相減 陣列相乘 陣列相減 資料轉置等函式

//矩陣相乘
    public double[][] multiplyMatrix(double[][] a,double[][] b){

         if(a[0].length != b.length) {
                return null;
         }
         double[][] c=new double[a.length][b[0].length];
            for(int i=0;i<a.length;i++) {
                for(int j=0;j<b[0].length;j++) {
                  for(int k=0;k<a[0].length;k++) {            
                c[i][j] += a[i][k] * b[k][j]; 
               } 
             }
           }
        return c;
    
    }

//矩陣相減
    public double[][] MatrixSubt(double[][]A,double[][] B){ 
        if (A.length != B.length ||  A[0].length != B[0].length )
        {
            return (null);
        }
        double[][]C=new double[A.length][A[0].length];  
        for(int i=0;i<A.length;i++)  
        {  
            for(int j=0;j<A[0].length;j++)  
            {  
                C[i][j]=A[i][j]-B[i][j];  
            }  
          
        }  
        return C;     
        
    } 

//矩陣相加
    public double[][] MatrixAdds(double[][]A,double[][] B){ 
        if (A.length != B.length ||  A[0].length != B[0].length )
        {
            return (null);
        }
        double[][]C=new double[A.length][A[0].length];  
        for(int i=0;i<A.length;i++)  
        {  
            for(int j=0;j<A[0].length;j++)  
            {  
                C[i][j]=A[i][j]+B[i][j];  
            }  
          
        }  
        return C;     
        
    } 

//陣列中元素求和
    public double ArrayNumberSum(double[][]A){ 
        if (A.length != 1 )
        {
            return (-1000);
        }
        double sum = 0;
        double[][]C=new double[A.length][A[0].length];  
        for(int i=0;i<A.length;i++)  
        {  
            for(int j=0;j<A[0].length;j++)  
            {  
                sum = sum + A[i][j];  
            }  
          
        }  
        return sum;     
        
    } 

//提取矩陣某一行資料
    public double[][] MatrixRow(double[][]A,int row){ 
        
        double[][] data = new double[1][A[0].length];//new一個一維陣列,長度是二維陣列列的個數
        for(int i=0;i<A[row].length;i++){//這裡獲取二維陣列 行的值
              data[0][i]=A[row][i];//賦值給一維陣列
        }
        return data;     
        
    } 

//提取矩陣某一列資料
    public double[][] MatrixColumn(double[][]A,int column){ 
        
        double[][] data = new double[A.length][1];//new一個一維陣列,長度是二維陣列列的個數
        for(int i=0;i<A.length;i++){//這裡獲取二維陣列 行的值
              data[i][0]=A[i][column];//賦值給一維陣列
        }
        return data;     
        
    } 

//矩陣相加
    public double[][] MatrixAdds(double[][]A,double[][] B){ 
        if (A.length != B.length ||  A[0].length != B[0].length )
        {
            return (null);
        }
        double[][]C=new double[A.length][A[0].length];  
        for(int i=0;i<A.length;i++)  
        {  
            for(int j=0;j<A[0].length;j++)  
            {  
                C[i][j]=A[i][j]+B[i][j];  
            }  
          
        }  
        return C;     
      

//陣列中對應位置資料相乘
    public double[][] multiplyArray(double[][] a,double[][] b){

           if(a.length != b.length || a[0].length != b[0].length ) {
                return null;
           }
         double[][] c=new double[a.length][b[0].length];
            for(int i=0;i<a.length;i++) {
                for(int j=0;j<b[0].length;j++) {
                           
                c[i][j] = a[i][j] * b[i][j]; 
               
             }
           }
        return c;
    
    }

//對資料進行轉置
     public static double[][] tfunction(double[][] test){  
        int m=test.length;  
        int n=test[0].length;  
        double t[][]=new double[n][m];  
        for(int i=0;i<n;i++){  
            for(int j=0;j<m;j++){  
                t[i][j]=test[j][i];  
            }  
        }  
        return  t;  
    }