Java中的矩阵乘法而不使用导入

时间:2015-03-23 17:54:41

标签: java matrix-multiplication

我正在尝试创建一个方法,从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;
    }

}

关于如何让它发挥作用的任何想法?

1 个答案:

答案 0 :(得分:0)

首先,没有必要在两个循环上做产品矩阵:

 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];