【问题标题】:Fast matrix multiplication of XDX^T for D diagonalXDX^T 对 D 对角线的快速矩阵乘法
【发布时间】:2019-03-11 21:51:40
【问题描述】:

考虑 XDX^T 对 X an n x m 矩阵和 D an m x m 对角矩阵的快速矩阵乘法。这里 m>>n(假设 n 在 1000 左右,m 在 100000 左右)。在我的应用程序中,X 是一个固定矩阵,并且 D 的值可以在每次迭代时改变。

什么是计算这个的快速方法?目前我只是在 C++ 中做简单的乘法运算。

编辑:我应该澄清我目前的程序,它不是“简单的乘法”。特别是,我将 X 乘以 D 的对角线项的平方根,得到 A:=XD^{1/2}。然后我直接计算 A*t(A)(这是一个 n 乘 m 矩阵与其转置的乘积)。

谢谢。

【问题讨论】:

  • 如果我没记错的话,你会得到一个 对称 n × n 矩阵 B,其中元素 Bi,j = sum(k=1,M) 的 Xi, k · Xj,k · Dk。我说的对吗?
  • 是的。请注意,对于 n 约 1000,m 约 100000,保存外积 X_,k · X_,k for k=1,...,m 占用过多内存。否则我们可以使用它来加快计算速度。

标签: c++ matrix matrix-multiplication


【解决方案1】:

如果你知道 D 是对角线,你可以做简单的乘法。希望您没有将零相乘。

【讨论】:

  • 查看我的编辑 - 已经按照您的建议进行操作。我在想是否有任何更快的方法可以利用 X 被修复。
猜你喜欢
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 2011-11-30
  • 2016-03-19
相关资源
最近更新 更多