Skip to content

Commit ffc97c3

Browse files
Sacha0fcard
authored andcommitted
Make nz2nz_z2z-class sparse unary broadcast leverage existing broadcast machinery rather than reimplement it poorly. (JuliaLang#19065)
1 parent bd6d807 commit ffc97c3

File tree

1 file changed

+3
-12
lines changed

1 file changed

+3
-12
lines changed

base/sparse/sparsematrix.jl

+3-12
Original file line numberDiff line numberDiff line change
@@ -1453,26 +1453,17 @@ round{To}(::Type{To}, A::SparseMatrixCSC) = _broadcast_unary_nz2z_z2z_T(round, A
14531453
Takes unary function `f` that maps zeros to zeros and nonzeros to nonzeros, and returns a
14541454
new `SparseMatrixCSC{TiA,TvB}` `B` generated by applying `f` to each nonzero entry in `A`.
14551455
"""
1456-
function _broadcast_unary_nz2nz_z2z_T{TvA,TiA,TvB}(f::Function, A::SparseMatrixCSC{TvA,TiA}, ::Type{TvB})
1456+
function _broadcast_unary_nz2nz_z2z{TvA,TiA,Tf<:Function}(f::Tf, A::SparseMatrixCSC{TvA,TiA})
14571457
Bcolptr = Vector{TiA}(A.n + 1)
14581458
Browval = Vector{TiA}(nnz(A))
1459-
Bnzval = Vector{TvB}(nnz(A))
14601459
copy!(Bcolptr, 1, A.colptr, 1, A.n + 1)
14611460
copy!(Browval, 1, A.rowval, 1, nnz(A))
1462-
@inbounds @simd for k in 1:nnz(A)
1463-
Bnzval[k] = f(A.nzval[k])
1464-
end
1461+
Bnzval = broadcast(f, A.nzval)
1462+
resize!(Bnzval, nnz(A))
14651463
return SparseMatrixCSC(A.m, A.n, Bcolptr, Browval, Bnzval)
14661464
end
1467-
function _broadcast_unary_nz2nz_z2z{Tv}(f::Function, A::SparseMatrixCSC{Tv})
1468-
_broadcast_unary_nz2nz_z2z_T(f, A, Tv)
1469-
end
14701465
@_enumerate_childmethods(_broadcast_unary_nz2nz_z2z,
14711466
log1p, expm1, abs, abs2, conj)
1472-
broadcast{TTv}(::typeof(abs2), A::SparseMatrixCSC{Complex{TTv}}) = _broadcast_unary_nz2nz_z2z_T(abs2, A, TTv)
1473-
broadcast{TTv}(::typeof(abs), A::SparseMatrixCSC{Complex{TTv}}) = _broadcast_unary_nz2nz_z2z_T(abs, A, TTv)
1474-
broadcast{TTv<:Integer}(::typeof(abs), A::SparseMatrixCSC{Complex{TTv}}) = _broadcast_unary_nz2nz_z2z_T(abs, A, Float64)
1475-
broadcast{TTv<:BigInt}(::typeof(abs), A::SparseMatrixCSC{Complex{TTv}}) = _broadcast_unary_nz2nz_z2z_T(abs, A, BigFloat)
14761467
function conj!(A::SparseMatrixCSC)
14771468
@inbounds @simd for k in 1:nnz(A)
14781469
A.nzval[k] = conj(A.nzval[k])

0 commit comments

Comments
 (0)