Julia 是否将SuiteSparse.SPQR.QRSparseQ转换为SparSematrix xCSC?

Julia 是否将SuiteSparse.SPQR.QRSparseQ转换为SparSematrix xCSC?,julia,sparse-matrix,linear-algebra,Julia,Sparse Matrix,Linear Algebra,我有一个问题,将本机稀疏格式转换为稀疏矩阵的QR分解需要花费很长时间。但是,我需要CSC格式的它来用于进一步的计算 using LinearAlgebra, SparseArrays N = 1000 A = sprand(N,N,1e-4) @time F = qr(A) @time F.Q @time Q_sparse = sparse(F.Q) 0.000420 seconds (1.15 k allocations: 241.017 KiB) 0.000008 seconds (6 a

我有一个问题,将本机稀疏格式转换为稀疏矩阵的QR分解需要花费很长时间。但是,我需要CSC格式的它来用于进一步的计算

using LinearAlgebra, SparseArrays
N = 1000
A = sprand(N,N,1e-4)
@time F = qr(A)
@time F.Q
@time Q_sparse = sparse(F.Q)

0.000420 seconds (1.15 k allocations: 241.017 KiB)
0.000008 seconds (6 allocations: 208 bytes)
6.067351 seconds (2.00 M allocations: 15.140 GiB, 36.25% gc time)

有什么建议吗?

好的,我发现问题了。对于其他尝试这样做的人:

factors = F.Q.factors
τ       = F.Q.τ
Nτ = size(factors)[2]
Isp = sparse(I(N));
@time Q_constr = prod(Isp - factors[:,i]*τ[i]*factors[:,i]' for i in 1:Nτ)
Q_constr ≈ Q_sparse

0.084461 seconds (62.64 k allocations: 3.321 MiB, 18.28% gc time)
true

您可以看到稀疏方法(F.Q)在某种程度上使用了错误的表示。如果你像我上面所做的那样构造Q,它会更快。

好的,我发现了问题。对于其他尝试这样做的人:

factors = F.Q.factors
τ       = F.Q.τ
Nτ = size(factors)[2]
Isp = sparse(I(N));
@time Q_constr = prod(Isp - factors[:,i]*τ[i]*factors[:,i]' for i in 1:Nτ)
Q_constr ≈ Q_sparse

0.084461 seconds (62.64 k allocations: 3.321 MiB, 18.28% gc time)
true
您可以看到稀疏方法(F.Q)在某种程度上使用了错误的表示。如果你像我上面所做的那样构造Q,它会更快