performance - 两个 Toeplitz 矩阵的乘积?

标签 performance algorithm matrix fft matrix-multiplication

计算 Toeplitz 矩阵和正确长度的向量的乘积的 O(n log n) 算法是众所周知的:将其放入循环矩阵中,将其乘以向量 (和后续的零),并返回产品的前 n 个元素。

我发现很难找到将两个相同大小的 Toeplitz 矩阵相乘的最佳(时间方面)算法。

谁能给我一个算法?

最佳答案

这是一个 O(n^2) 时间的算法。

要计算乘积矩阵的对角线之一,我们需要在长度为 (2n-1) 的列表的长度为 n 的窗口上计算点积,这些列表是同步滑动的。可以在时间 O(1) 中计算两个连续条目之间的差异。

例如,考虑

e f g h i    o p q r s
d e f g h    m o p q r
c d e f g    l m o p q
b c d e f    k l m o p
a b c d e    j k l m o

1,1 条目是 eo + fm + gl + hk + ij。 2,2 条目是 dp + eo + fm + gl + hk,或者 1,1 条目减去 ij 加上 dp。 3,3 条目是 cq + dp + eo + fm + gl,或者 2,2 条目减去 hk 加上 cq。 4,4条目是br + cq + dp + eo + fm

如果你在 float 中实现它,请注意 catastrophic cancellation .

关于performance - 两个 Toeplitz 矩阵的乘积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15889521/

相关文章:

c++ - 从给定模型获取所有构建订单。

python - 是否有与 Python 3.x 兼容的矩阵数学模块?

c# - 虚方法比非虚方法快?

android - 在单独的线程上运行一段代码

algorithm - visual c++在std::sort中使用什么排序算法

c# - 一个大数组如何拆分成更小的数组?

c - 优化数组转置功能

matrix - 使用匈牙利算法解决分配问题的次优解

javascript - 对于 20 多个元素,哪个 jQuery 操作更快?

java - Heroku 时间与本地时间 : too much difference