Julia:找出锯齿状阵列的元素最大值和最小值

问题描述 投票:0回答:1

我有一个锯齿状的数组。像下面这样,我想找到元素最大值和最小值,如下所示。

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

这看起来很聪明,但是对于更大的阵列需要花费大量的时间。是否有一种惯用的朱莉娅这样做的方式?

arrays julia julian
1个回答
1
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.