From 1a2ecc2a83c057729835b790d540e0a718eb3b3e Mon Sep 17 00:00:00 2001 From: mcognetta Date: Mon, 30 Jul 2018 01:43:14 +0900 Subject: [PATCH 1/2] changed bi/tri/symdiagonal matrix multiplication to output a sparse matrix instead of dense --- stdlib/LinearAlgebra/src/bidiag.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/LinearAlgebra/src/bidiag.jl b/stdlib/LinearAlgebra/src/bidiag.jl index 89bf143b3a973..e9d20cc64ec02 100644 --- a/stdlib/LinearAlgebra/src/bidiag.jl +++ b/stdlib/LinearAlgebra/src/bidiag.jl @@ -503,7 +503,7 @@ end const SpecialMatrix = Union{Bidiagonal,SymTridiagonal,Tridiagonal} # to avoid ambiguity warning, but shouldn't be necessary *(A::AbstractTriangular, B::SpecialMatrix) = Array(A) * Array(B) -*(A::SpecialMatrix, B::SpecialMatrix) = Array(A) * Array(B) +*(A::SpecialMatrix, B::SpecialMatrix) = mul!(spzeros(size(A)...), A, B) #Generic multiplication *(A::Bidiagonal{T}, B::AbstractVector{T}) where {T} = *(Array(A), B) From 6c29cc64f86fe1512b2b57e9fedcc5da2a255b6b Mon Sep 17 00:00:00 2001 From: mcognetta Date: Mon, 30 Jul 2018 02:42:00 +0900 Subject: [PATCH 2/2] moved the new method to sparsearrays --- stdlib/LinearAlgebra/src/bidiag.jl | 3 ++- stdlib/SparseArrays/src/SparseArrays.jl | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/stdlib/LinearAlgebra/src/bidiag.jl b/stdlib/LinearAlgebra/src/bidiag.jl index e9d20cc64ec02..9bcfc33944d99 100644 --- a/stdlib/LinearAlgebra/src/bidiag.jl +++ b/stdlib/LinearAlgebra/src/bidiag.jl @@ -503,7 +503,8 @@ end const SpecialMatrix = Union{Bidiagonal,SymTridiagonal,Tridiagonal} # to avoid ambiguity warning, but shouldn't be necessary *(A::AbstractTriangular, B::SpecialMatrix) = Array(A) * Array(B) -*(A::SpecialMatrix, B::SpecialMatrix) = mul!(spzeros(size(A)...), A, B) +# moving this to sparsearrays since it needs spzeros +# *(A::SpecialMatrix, B::SpecialMatrix) = mul!(spzeros(size(A)...), A, B) #Generic multiplication *(A::Bidiagonal{T}, B::AbstractVector{T}) where {T} = *(Array(A), B) diff --git a/stdlib/SparseArrays/src/SparseArrays.jl b/stdlib/SparseArrays/src/SparseArrays.jl index 95ef9560a809e..f693665ddee67 100644 --- a/stdlib/SparseArrays/src/SparseArrays.jl +++ b/stdlib/SparseArrays/src/SparseArrays.jl @@ -52,5 +52,6 @@ similar(B::Bidiagonal, ::Type{T}, dims::Union{Dims{1},Dims{2}}) where {T} = spze similar(D::Diagonal, ::Type{T}, dims::Union{Dims{1},Dims{2}}) where {T} = spzeros(T, dims...) similar(S::SymTridiagonal, ::Type{T}, dims::Union{Dims{1},Dims{2}}) where {T} = spzeros(T, dims...) similar(M::Tridiagonal, ::Type{T}, dims::Union{Dims{1},Dims{2}}) where {T} = spzeros(T, dims...) +*(A::Union{Bidiagonal,SymTridiagonal,Tridiagonal}, B::Union{Bidiagonal,SymTridiagonal,Tridiagonal}) = mul!(spzeros(size(A)...), A, B) end