Skip to content

Commit ef19ed2

Browse files
dkarraschKristofferC
authored andcommitted
stdlib/SparseArrays: add rmul! and lmul! of sparse matrix with Diagonal (#29296)
* Add rmul! and lmul! of sparse matrix with Diagonal (cherry picked from commit 9454c8d)
1 parent 33a5d6a commit ef19ed2

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

stdlib/SparseArrays/src/linalg.jl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,11 +1017,33 @@ function rmul!(A::SparseMatrixCSC, b::Number)
10171017
rmul!(A.nzval, b)
10181018
return A
10191019
end
1020+
10201021
function lmul!(b::Number, A::SparseMatrixCSC)
10211022
lmul!(b, A.nzval)
10221023
return A
10231024
end
10241025

1026+
function rmul!(A::SparseMatrixCSC, D::Diagonal)
1027+
m, n = size(A)
1028+
(n == size(D, 1)) || throw(DimensionMismatch())
1029+
Anzval = A.nzval
1030+
@inbounds for col = 1:n, p = A.colptr[col]:(A.colptr[col + 1] - 1)
1031+
Anzval[p] *= D.diag[col]
1032+
end
1033+
return A
1034+
end
1035+
1036+
function lmul!(D::Diagonal, A::SparseMatrixCSC)
1037+
m, n = size(A)
1038+
(m == size(D, 2)) || throw(DimensionMismatch())
1039+
Anzval = A.nzval
1040+
Arowval = A.rowval
1041+
@inbounds for col = 1:n, p = A.colptr[col]:(A.colptr[col + 1] - 1)
1042+
Anzval[p] *= D.diag[Arowval[p]]
1043+
end
1044+
return A
1045+
end
1046+
10251047
function \(A::SparseMatrixCSC, B::AbstractVecOrMat)
10261048
@assert !has_offset_axes(A, B)
10271049
m, n = size(A)

0 commit comments

Comments
 (0)