簡體   English   中英

不使用導入的Java中的矩陣乘法

[英]Matrix Multiplication in Java Without Using Imports

我試圖做一個方法,可以從2個文件中讀取輸入,每個文件都包含一個矩陣。 目的是檢查它們是否可以相乘(如果一個行的長度與另一個行的長度相同),然后創建兩個輸入矩陣的乘積矩陣。 這是我到目前為止所擁有的。 它不起作用,我沒想到它會起作用。 我只想在該方法的邏輯部分獲得幫助。

public class MatrixOps {

    public static double[][] multiply(double[][] matrix1, double[][] matrix2) {
        int matrix1Cols = matrix1.length;
        int matrix1Rows = matrix1[0].length;
        int matrix2Cols = matrix2.length;
        int matrix2Rows = matrix2[0].length;
        double[][] productMatrix = new double[0][0];

        if (matrix1Rows == matrix2Cols) {
            productMatrix = new double[matrix1Cols][matrix2Rows];
            for (int i = 0; i < matrix1Cols; i++) {
                for (int j = 0; j < matrix1Rows; j++) {
                    productMatrix[i][j] += matrix1[i][j] * matrix2[j][i];
                    for (int k = 0; k < matrix2Rows; k++) {
                        productMatrix[i][j] += matrix1[i][j] * matrix2[j][k];
                    }
                }
            }
        }

        if (matrix1Cols == matrix2Rows) {
            productMatrix = new double[matrix2Cols][matrix1Rows];
            for (int i = 0; i < matrix2Rows; i++) {
                for (int j = 0; j < matrix1Cols; j++) {
                    productMatrix[i][j] += matrix1[i][j] * matrix2[j][i];
                    for (int k = 0; k < matrix2Rows; k++) {
                        productMatrix[i][j] += matrix1[i][j] * matrix2[j][k];
                    }
                }
            }
        }
        return productMatrix;
    }

}

關於如何使其正常工作的任何想法?

首先,不必在兩個循環上都做乘積矩陣:

 for (int i = 0; i < matrix1Cols; i++) {
     for (int j = 0; j < matrix1Rows; j++) {
         productMatrix[i][j] += matrix1[i][j] * matrix2[j][i];
     for (int k = 0; k < matrix2Rows; k++) {
         productMatrix[i][j] += matrix1[i][j] * matrix2[j][k];
     }
 }

這足夠了:

for (int i = 0; i < matrix1Cols; i++) {
    for (int j = 0; j < matrix1Rows; j++) {
        for (int k = 0; k < matrix2Rows; k++) {
            productMatrix[i][j] += matrix1[i][j] * matrix2[j][k];
       }
   }
}

同樣,如果您要更改矩陣乘法的順序,那么它必須反映在您的操作中(似乎您只是在進行復制粘貼)

所以在第二部分:

if (matrix1Cols == matrix2Rows) {

矩陣乘法必須更改為:

productMatrix[i][j] += matrix1[i][j] * matrix2[j][k];

至:

productMatrix[i][j] += matrix2[i][j] * matrix1[j][k];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM