gpt4 book ai didi

java - Java中两个矩阵相乘

转载 作者:行者123 更新时间:2023-12-02 13:25:04 27 4
gpt4 key购买 nike

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

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

public Matrix multiply(Matrix A) {
////code
}

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

我还不需要担心检查给定矩阵上是否定义了乘法,我可以假设我将获得正确维度的矩阵。

有谁知道一种简单的算法,甚至可能用伪代码来执行乘法过程?

最佳答案

在数学上,矩阵 A (l x m) 和 B (m x n) 的乘积定义为由以下元素组成的矩阵 C (l x n):

        m
c_i_j = ∑ a_i_k * b_k_j
k=1

因此,如果您不太注重速度,您可能会对直接的 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]

如果您追求速度,您可能需要检查其他替代方案,例如 Strassen 算法(请参阅:Strassen 算法)。

尽管如此,请注意 - 特别是当您在现代处理器架构上乘以小矩阵时,速度在很大程度上取决于矩阵数据和乘法顺序的排列方式,以充分利用缓存行。

我强烈怀疑虚拟机是否有机会影响这个因素,所以我不确定是否要考虑这一点。

关于java - Java中两个矩阵相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15733829/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com