在Java中乘以两个矩阵

Jar*_*ris 2 java arrays matrix multiplication multidimensional-array

我目前正在开发一个表示矩阵的类,它代表任何通用的mxn矩阵.我已经计算出了加法和标量乘法,但我正在努力开发两个矩阵的乘法.矩阵的数据保存在二维的二维数组中.

该方法看起来有点像这样:

   public Matrix multiply(Matrix A) {
            ////code
   }
Run Code Online (Sandbox Code Playgroud)

它将返回产品矩阵.这是右边的乘法.因此,如果我调用A.multiply(B),那么它将返回矩阵AB,右边是B.

我还不需要担心检查乘法是否在给定矩阵上定义,我可以假设我将得到正确尺寸的矩阵.

有没有人知道一个简单的算法,甚至可能在伪代码中执行乘法过程?

提前致谢.

mik*_*yra 10

数学上矩阵的乘积A(lxm)和B(mxn)被定义为由元素组成的矩阵C(lxn):

        m
c_i_j = ?  a_i_k * b_k_j
       k=1
Run Code Online (Sandbox Code Playgroud)

因此,如果您的速度不是太高,您可能会对直接的O(n ^ 3)实现感到满意:

  for (int i=0; i<l; ++i)
    for (int j=0; j<n; ++j)
      for (int k=0; k<m; ++k)
        c[i][j] += a[i][k] * b[k][j]  
Run Code Online (Sandbox Code Playgroud)

如果您想要提高速度,可能需要检查其他替代方案,如Strassen算法(请参阅:Strassen算法).

然而要注意 - 特别是如果你在现代处理器架构上乘以小矩阵,速度很大程度上取决于矩阵数据和乘法顺序,以便最好地利用缓存线.

我强烈怀疑有没有机会用vm来影响这个因素,所以我不确定是否要考虑这个因素.