我有一个锯齿状的数组。像下面这样,我想找到元素最大值和最小值,如下所示。
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的简短快捷方式是
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)