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来影响这个因素,所以我不确定是否要考虑这个因素.