If you define

`Q = collect(-10:.01:10) v = Q.-transpose(Q) cv = complex.(v) comp = exp.(-im.*Q)`

then multiplying cv*comp takes 2.94ms on my computer compared with 3.41ms for v*comp (times measured with btime) Any idea why this is?

# Vector{Float} times Vector{Complex} slower than Vector{Complex} times Vector{Complex}

The former has the extra step of converting `Float`

s to `Complex`

s.

That would make sense if it was also slower for single element multiplication, but it’s not. Also it ideally would be possible to perform the multiplication without conversion since multiplying real by complex is easy

First of all, running your code, I get

```
Q = collect(-10:.01:10)
v = Q.-transpose(Q)
cv = complex.(v)
comp = exp.(-im.*Q)
using BenchmarkTools
@btime $cv * $comp; # 2.561 ms (2 allocations: 31.39 KiB)
@btime $v * $comp; # 2.610 ms (2 allocations: 31.39 KiB)
```

Secondly, `cv`

and `v`

are matrices, not vectors.

( `typeof(v) == Array{Complex{Float64},2}`

).

Also note that you generally doesn’t have to (and shouldn’t) `collect`

ranges.

1 Like

Could it be a blas difference? I’m on linux.

1 Like

Thanks for finding the issue. It would be great if this were improved, though I understand it’s probably difficult if BLAS doesn’t support it natively