suppose that I have a
x. I wish to identify non-zero elements of this vector. Below are my proposal for that.
f1!(y,x) = y .= (x .!=0 )[:]; function f2!(y,x) @inbounds @simd for i ∈ eachindex(x) if x[i]!=0 y[i] = true end end end q = 43416; x = Array(sprand(Float64, 1, q, 0.75)); y = falses(q); @btime f1!($y,$x); 126.599 μs (5 allocations: 15.14 KiB) @btime f2!($y,$x); 133.500 μs (0 allocations: 0 bytes)
As you can see,
f1! is a bit faster than
f2!. However, it requires a few allocations. So, my question here is whether it is possible to write a function that is as fast as f1 and does not require allocations? Thank you very much in advance!