Hi,
I have a function f(i) = SA[i,2i]
that generates SVectors. I want to concatenate a small, but variable amount of them into a SMatrix. For a fixed amount I can do:
julia> [f(1) f(2) f(3)]'
3×2 SMatrix{3, 2, Int64, 6} with indices SOneTo(3)×SOneTo(2):
1 2
2 4
3 6
which is fast:
julia> @benchmark [f(1) f(2) f(3)]'
BenchmarkTools.Trial: 10000 samples with 1000 evaluations.
Range (min … max): 0.023 ns … 0.082 ns ┊ GC (min … max): 0.00% … 0.00%
Time (median): 0.027 ns ┊ GC (median): 0.00%
Time (mean ± σ): 0.027 ns ± 0.003 ns ┊ GC (mean ± σ): 0.00% ± 0.00%
Memory estimate: 0 bytes, allocs estimate: 0.
Is there a fast way to do this with a variable amount of calls to f
, like [f(1) f(2) ... f(N)]
?
I know I can do
julia> hcat( [f(i) for i in 1:3]...)'
3×2 SMatrix{3, 2, Int64, 6} with indices SOneTo(3)×SOneTo(2):
1 2
2 4
3 6
but this approach is very slow:
julia> @benchmark hcat( [f(i) for i in 1:3]...)'
BenchmarkTools.Trial: 10000 samples with 705 evaluations.
Range (min … max): 166.813 ns … 5.976 μs ┊ GC (min … max): 0.00% … 95.94%
Time (median): 176.813 ns ┊ GC (median): 0.00%
Time (mean ± σ): 206.796 ns ± 361.318 ns ┊ GC (mean ± σ): 12.38% ± 6.82%
Memory estimate: 336 bytes, allocs estimate: 6.
Thank you,
Nico