Юлия: Нахождение поэлементного максимума и минимума зубчатого массива - PullRequest
0 голосов
/ 09 января 2019

У меня есть зубчатый массив массивов. Как показано ниже, и я хочу найти поэлементный максимум и минимум, как показано ниже.

julia> srand(0);
julia> triarr = [[rand(0:99, 2) for i in 1:j] for j in 1:3]
3-element Array{Array{Array{Int64,1},1},1}:
Array{Int64,1}[[40, 6]]                    
Array{Int64,1}[[29, 77], [44, 74]]         
Array{Int64,1}[[64, 23], [55, 8], [35, 37]]
julia> min.(vcat(triarr...)...)
2-element Array{Int64,1}:
29
6
julia> max.(vcat(triarr...)...)
2-element Array{Int64,1}:  
64
77

Это работает и выглядит умно, но занимает больше времени для больших массивов. Есть ли у Джулии идиоматический способ сделать это?

1 Ответ

0 голосов
/ 09 января 2019

Короткий и быстрый путь на Julia 1.0 -

julia> h(t) = minimum(Iterators.flatten(t))
h (generic function with 1 method)

julia> @btime h($triarr);
  806.500 ns (4 allocations: 80 bytes)

Это должно быть почти оптимально:

julia> function g(t)
           itr = Iterators.flatten(t)
           xmin, ymin = first(itr)
           @inbounds for i in itr
               i[1] < xmin && (xmin = i[1])
               i[2] < ymin && (ymin = i[2])
           end
           return xmin, ymin
       end
g (generic function with 1 method)

julia> @btime g($triarr);
  23.466 ns (0 allocations: 0 bytes)
...