【发布时间】:2017-05-29 01:17:14
【问题描述】:
避免数组分配有利于性能。但是,我还没有理解对矩阵A 执行 QR 分解的最有效方法是什么。 (注意:Q 和 R 矩阵都需要)
只需使用
Q, R = qr(A)
可能不是最好的主意,因为它同时分配了 Q 和 R,两者都可以重新分配。
函数qrfact 允许一个store factorization in a packed format。但是,我还是会在之后写:
F = qrfact(A); Q = F[:Q]; R = F[:R]
再次为Q 和R 分配新数组。最后,文档还建议使用qrfact! 函数,即saves space by overwriting the input A, instead of creating a copy。但是,如果使用F = qrfact!(A)
被覆盖的A 没有有用,因为它不是Q 或R,这是一个人(特别是我)需要的。
所以我的两个问题是:
如果您只关心矩阵
Q和R并且重新分配它们没有问题,那么执行 QR 分解的最佳/最有效方法是什么。当调用
qrfact!(A)时,矩阵A中实际写的是什么?
【问题讨论】:
-
事后为什么需要
Q = F[:Q]; R = F[:R]?你不能直接使用F[:Q]吗? -
Julia 文档中有对存储方法的引用。具体来说,这个paper 被链接到。但事实上,你会想看看这个julia code
-
@MichaelK.Borregaard 使用
Q或F[:Q]对我来说并不重要。问题是如何避免从F[:Q]完成分配(如果有的话)。 -
哦该死,不幸的是我需要对
F[:Q]矩阵进行操作,因为我需要更改某些列上的符号(qr-decomposition 以查找 lyapunov 指数) -
我有一些 严重 怀疑分配数组的成本(实际上是 O(1))在涉及执行 O(n^3) 的算法中甚至可以检测到QR分解。您是否分析了您的代码并确认您确实需要避免这些分配?
标签: performance julia linear-algebra qr-decomposition