@@ -1453,26 +1453,17 @@ round{To}(::Type{To}, A::SparseMatrixCSC) = _broadcast_unary_nz2z_z2z_T(round, A
1453
1453
Takes unary function `f` that maps zeros to zeros and nonzeros to nonzeros, and returns a
1454
1454
new `SparseMatrixCSC{TiA,TvB}` `B` generated by applying `f` to each nonzero entry in `A`.
1455
1455
"""
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,FT<:Function } (f:: FT , A:: SparseMatrixCSC{TvA,TiA} )
1457
1457
Bcolptr = Vector {TiA} (A. n + 1 )
1458
1458
Browval = Vector {TiA} (nnz (A))
1459
- Bnzval = Vector {TvB} (nnz (A))
1460
1459
copy! (Bcolptr, 1 , A. colptr, 1 , A. n + 1 )
1461
1460
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))
1465
1463
return SparseMatrixCSC (A. m, A. n, Bcolptr, Browval, Bnzval)
1466
1464
end
1467
- function _broadcast_unary_nz2nz_z2z {Tv} (f:: Function , A:: SparseMatrixCSC{Tv} )
1468
- _broadcast_unary_nz2nz_z2z_T (f, A, Tv)
1469
- end
1470
1465
@_enumerate_childmethods (_broadcast_unary_nz2nz_z2z,
1471
1466
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)
1476
1467
function conj! (A:: SparseMatrixCSC )
1477
1468
@inbounds @simd for k in 1 : nnz (A)
1478
1469
A. nzval[k] = conj (A. nzval[k])
0 commit comments