Broadcasting trig functions to SparseArrays.SparseMatrixCSC

You can explicitly broadcast over the non-zero values, x.nzval.

using LinearAlgebra, SparseArrays
using Random
Random.seed!(1)

N = 4
x = sparse(Diagonal(rand(ComplexF64,N)))

println("Original")
println(x,"\n")

@. x.nzval = cos(x.nzval)

println("Broadcast cos")
println(x)

which prints out

Original

  [1, 1]  =  0.236033+0.346517im
  [2, 2]  =  0.312707+0.00790928im
  [3, 3]  =  0.488613+0.210968im
  [4, 4]  =  0.951916+0.999905im

Broadcast cos

  [1, 1]  =  1.03123-0.0826637im
  [2, 2]  =  0.951534-0.0024332im
  [3, 3]  =  0.902708-0.099765im
  [4, 4]  =  0.895112-0.957115im
1 Like