如何将两个不同大小的矩阵相乘

时间:2018-11-24 00:35:24

标签: java for-loop multidimensional-array

我正在研究一种简单的加密算法,因此我需要将两个矩阵相乘:

这是第一个:

$ ln -s ~/vbootstrap/bin/pipenv ~/pipenv
$ ~/pipenv shell
Launching subshell in virtual environment...
vagrant@vagrant:~/my_project$  . /home/vagrant/.local/share/virtualenvs/my_project-KmT425B_/bin/activate
(my_project) $

这是第二个:

86  65  76  76
69  45  71  82
65  78  68  69

根据我工作的page,结果应该是:

13  9   3   5
2   1   4   6
4   6   2   7
8   5   4   1

我在这里留下了无效的代码:

2160    1675    974 1428
1927    1502    857 1194
1825    1416    919 1338

显然,在变量计数方面,某个变量与矩阵的大小不匹配,但我无法解决它。

1 个答案:

答案 0 :(得分:0)

这是与您尝试执行的操作类似的解决方案,您可以根据需要使用它。您的问题源于您对尺寸感到困惑。

public class Main {

public static void main(String[] args) {
    int r1 = 3, c1 = 4;
    int r2 = 4, c2 = 4;
    int[][] firstMatrix = { {x, x, x, x}, {x, x, x, x}, {x, x, x, x} };
    int[][] secondMatrix = { {x, x, x, x}, {x, x, x, x}, {x, x, x, x}, {x, x, x, x} };

    // Mutliplying Two matrices
    int[][] product = multiplyMatrices(firstMatrix, secondMatrix, r1, c1, c2);

    // Displaying the result
    displayProduct(product);
}

public static int[][] multiplyMatrices(int[][] firstMatrix, int[][] secondMatrix, int r1, int c1, int c2) {
    int[][] product = new int[r1][c2];
    for(int i = 0; i < r1; i++) {
        for (int j = 0; j < c2; j++) {
            for (int k = 0; k < c1; k++) {
                product[i][j] += firstMatrix[i][k] * secondMatrix[k][j];
            }
        }
    }

    return product;
}

public static void displayProduct(int[][] product) {
    System.out.println("Product of two matrices is: ");
    for(int[] row : product) {
        for (int column : row) {
            System.out.print(column + "    ");
        }
        System.out.println();
    }
}

}

在双精度数组中,其[行] [列]-您的输出将具有3行和4列(如从网站上看到的),因此结果的尺寸应为resultado [3] [4]。您的Mensaje矩阵应为[3] [4],而不是[4] [3]。我想您可以解决其余的问题。