-
-
Notifications
You must be signed in to change notification settings - Fork 29
Open
Description
Came up on https://discourse.julialang.org/t/best-way-for-linear-regression-problem-on-product-features/127786.
julia> using LinearAlgebra
julia> N = 1_000_000; X = ones(N, 1); Y = Diagonal(ones(N)); Xqr = qr(X);
julia> Xqr \ Y
ERROR: OutOfMemoryError()
julia> Xqr.Q' * Y # tries to densely materialize Y # EDIT: No, see below where we discuss that this operation fails because the result is NxN.
ERROR: OutOfMemoryError()
julia> Matrix(Xqr.Q)' * Y # the materialized rectangular Q works fine
1×1000000 Matrix{Float64}:
-0.001 -0.001 -0.001 -0.001 -0.001 … -0.001 -0.001 -0.001 -0.001
julia> Xqr.R \ (Matrix(Xqr.Q)' * Y) # can solve the system by manual application
1×1000000 Matrix{Float64}:
1.0e-6 1.0e-6 1.0e-6 1.0e-6 1.0e-6 … 1.0e-6 1.0e-6 1.0e-6 1.0e-6
This happens with both QRCompactWYQ
(this case) and QRPackedQ
(pivoted case), at least.
I haven't wrapped my head fully around what the full solution should be (AbstractQ
representations make my head spin). What's efficient may vary with context, so it's possible there are some real design decisions involved around this issue. Broadly speaking, it seems that applying a "dimension-reducing" AbstractQ
to certain structured matrices (Diagonal
and AbstractSparseMatrix
, for example) might benefit from materializing the AbstractQ
rather than the structured matrix.
Metadata
Metadata
Assignees
Labels
No labels