Geo*_*ris 7 performance linear-algebra julia qr-decomposition
避免阵列分配有利于提高性能.但是,我还没有理解什么是最有效的方法,可以执行矩阵的QR分解A.(注意:需要Q和R矩阵)
简单地使用
Q, R = qr(A)
可能不是最好的主意,因为它分配Q和R,两者都可以重新分配.
该函数qrfact允许以打包格式存储因子分解.但是,我之后仍会写:
F = qrfact(A); Q = F[:Q]; R = F[:R]
再次为Q和分配新数组R.最后,文档还建议了该qrfact!函数,它通过覆盖输入A来节省空间,而不是创建副本.但是,如果一个人使用F = qrfact!(A)
覆盖写入A是没有用的,因为它不是,Q或者R哪一个(具体来说,我)需要.
所以我的两个问题是:
如果您只关心矩阵Q并且R重新分配它们没有问题,那么执行QR分解的最佳/最有效方法是什么?
A当一个人打电话时,矩阵中实际写的是什么qrfact!(A)?
在
F = qrfact!(A)
Run Code Online (Sandbox Code Playgroud)
或者
F = qrfact(A)
Run Code Online (Sandbox Code Playgroud)
F[:Q]并且F[:R]不分配新的密集数组;他们只是欣赏到压缩格式从Q和R是很容易计算。这意味着qrfact!(A)不需要为Qand分配数组R,它只是简单地为 计算打包格式A。
但是,这也意味着F[:Q]和F[:R] 不能突变。如果出于某种原因需要修改其中之一,则需要将collect其转换为 mutable Array,这肯定会分配。使用qrfact!(A)代替仍然会更有效qrfact(A),因为后者将为打包的 QR 分解以及collected分配空间Array。