朱莉娅(Julia):查找锯齿状数组的逐元素最大值和最小值

时间:2019-01-09 04:57:27

标签: arrays julia julian

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

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

这可以工作并且看起来很聪明,但是对于较大的数组需要很多时间。有惯用的Julia方式吗?

1 个答案:

答案 0 :(得分: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)