Skip to content

Conversation

mcabbott
Copy link
Owner

@mcabbott mcabbott commented Apr 4, 2021

On master the following syntax is understood:

julia> using TensorCast, ImageCore

julia> mat = rand(1:10, 4, 3) ./ 10;

julia> @cast _[k] := RGB(mat[k,:]...)
4-element Array{RGB{Float64},1} with eltype RGB{Float64}:
 RGB{Float64}(0.8,0.7,0.7)
 RGB{Float64}(0.5,0.7,0.5)
 RGB{Float64}(0.9,0.7,0.2)
 RGB{Float64}(0.7,0.2,1.0)

But this is done quite inefficiently, by literally performing the splat for every slice. It would be better to re-write it to slice the other way, splat once, and then broadcast:

julia> @btime Base.splat(RGB).(eachrow(m))  setup=(m=rand(100,3));
 22.541 μs (1122 allocations: 38.89 KiB)

julia> @btime RGB.(eachcol(m)...)  setup=(m=rand(100,3));
 421.905 ns (10 allocations: 3.12 KiB)

Can this be done in general?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant