【问题标题】:How to calculate the square of Frobenius norm of a matrix faster?如何更快地计算矩阵的 Frobenius 范数的平方?
【发布时间】:2021-10-17 16:34:29
【问题描述】:

假设A是一个形状为(m,1)的列向量,B是一个形状为(1,p)的行向量,C是A和B的矩阵乘积,即C=AB,所以C的形状是(m,p)。

现在我想计算 C 的 Frobenius 范数的平方,即 sum_i sum_j c_{ij}^2(C 元素所有平方的总和)

注意c_{ij}=a_i*b_j,a_i和b_j是A和B中的元素,所以我可以重写上面的公式。

sum_i sum_j c_{ij}^2=sum_i sum_j (a_ib_j)^2=sum_i a_i^2 *sum_j b_j^2

公式sum_i sum_j c_{ij}^2的复杂度是O(mp)。

公式 sum_i a_i^2*sum_j b_j^2 的复杂度为 O(m+p),因为 A 和 B 的维数比 C 低。

但是,当 A 和 B 都是矩阵时,这个技巧就失效了。

考虑一下,A是一个形状为(m,n)的矩阵,B是一个形状为(n,p)的矩阵,C是A和B的矩阵乘积,即C=AB,所以C的形状也是(m,p)。

我还想计算这个 sum_i sum_j c_{ij}^2

注意c_{ij}=sum_k a_{ik}*b_{kj},所以

sum_i sum_j c_{ij}^2=sum_i sum_j(sum_k a_{ik}*b_{kj})^2

因此,此时,我无法像以前那样使用任何技巧(矢量版)

所以我的问题是,我需要矩阵 C,还需要 C 的 Frobenius 范数的平方,直接使用 C 会比使用 A 和 B 更快吗?

C 的 Frobenius 范数的平方 = CC^T 的迹

【问题讨论】:

  • 嗨!欢迎来到 StackOverflow。这是一个有趣的问题,但 StackOverflow 不会渲染乳胶,所以所有这些美元符号都让你的问题更难阅读,而不是更容易。但也许cs.stackexchange.commath.stackexchange.com 会更适合这个问题(而且它们会渲染乳胶)。
  • 这可能是一个 math.stackexchange 问题。
  • @Stef 谢谢!我将在这里编辑我的问题并将其重新发布到 math.stackexchange 上。

标签: algorithm matrix


【解决方案1】:

您需要 AB 的 Frobenius 范数的平方。 Frobenius 范数是 通过旋转保留,这导致以下 O((m+n+p) n2)-时间算法。

假设 m ≥ p 和 n ≥ p(如果我们定义,这不应该是关键的 简并情况正确),令 A = QR 为约简 A 的 QR 分解和 tB = Q′R′ 被简化 tB 的 QR 分解。我们想要 AB 的 Frobenius 范数 = QRt(Q′R′) = QRtR′tQ′。由于 Q 和 Q′ 是半正交的,只要找到 Frobenius 范数就足够了 RtR'。由于 R 和 R' 是 n × n 矩阵,我们可以使用 简单的 O(n3) 时间算法。

【讨论】:

  • 谢谢!实际上,我还需要矩阵 C。所以如果我从 C 计算 Frobenius 范数而不是使用矩阵 A 和 B,它会更快吗? CC^T 的迹的平方根等于 C 的 Frobenius 范数。
  • @KevinHsu 如果你仍然需要 C,你应该计算它然后取它的范数。
猜你喜欢
  • 2018-05-01
  • 2019-09-04
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多