【问题标题】:Efficient way to calculate diagonal of the inverse of a matrix计算矩阵逆对角线的有效方法
【发布时间】:2017-12-23 21:54:12
【问题描述】:

计算对称密集矩阵 (2000 * 2000) 的逆对角线的最佳方法是什么?目前我首先使用solve(x) 计算逆,然后提取对角线(diag(y))。即使它有效,但我想知道是否有更好的方法可以让代码运行得更快。我试过chol2inv(),但它不起作用,因为我的矩阵不是正定的。

更新: 对于任何可能感兴趣的人,我可以通过使用优化的数学库 Intel MKL 来加速矩阵求逆。在我的机器上反转一个 2000 * 2000 矩阵需要 3 秒。 Microsoft R Open 提供英特尔 MKL。

【问题讨论】:

  • 在简短的谷歌搜索中,我发现了很多与此问题相关的算法和其他实现的链接。您是否明确需要对角线的每个元素,还是打算在另一个计算中使用它?如果您想在进一步的计算中使用它,那么这些知识对于加快执行速度至关重要。
  • 我在其他计算中使用对角线。具体来说,我将另一个向量中的每个元素除以逆矩阵的对角线的每个元素,然后将它们相加。
  • 你怎么知道逆对角线的每个元素都不为零?矩阵是否有一些属性可以保证这一点?

标签: r matrix-inverse


【解决方案1】:

如果您的矩阵没有对称、对角线或正定等好的属性,那么遗憾的是,您唯一的选择就是 sum(diag(solve(x)))

在您的矩阵上运行需要多长时间?

【讨论】:

  • 它是对称的,但不幸的是不是正定的。 Chol2inv 会快很多。运行大约需要 15 秒。运行时并不可怕,但它加起来很快,因为我有一个迭代过程,所以矩阵在过程中每次都被反转。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多