如何一次检查Julia数组中的所有值?让我们说我有一个类似a=[3,4,6,10,55,31,9,10]
的数组如何检查数组是否有大于10的值?或者我如何检查是否有重复值(例如样本中包含两次的10个?我知道我可以编写循环来检查这一点,但我认为Julia可以更快地检查所有值。
答案 0 :(得分:8)
函数any
和count
执行此操作:
julia> a = [3,4,6,10,55,31,9,10]
8-element Array{Int64,1}:
3
4
6
10
55
31
9
10
julia> any(x->x==3, a)
true
julia> count(x->x==10, a)
2
然而,性能可能与循环大致相同,因为julia中的循环很快(并且这些函数本身在标准库中的julia中实现)。
如果问题有更多的结构,你可以获得大的加速。例如,如果向量已排序,您可以使用searchsorted
通过二分查找来查找匹配值。
答案 1 :(得分:3)
您还可以使用广播操作。在某些情况下,它的语法比any
和count
更好,在其他情况下,它可能不那么明显:
boola = a.>10 # Returns an Array{Bool}, true at any value >10
minimum(boola) # Returns false if any are <10
sum(a-10 .== 0) # Finds all values equal to 10, sums to get a count
答案 2 :(得分:0)
不确定在以前的回答时是否已实现,但是现在最简洁的方法是:
all(a .> 10)
正如Chris Rackauckas所述,a .> 10
返回一个布尔数组,然后all
仅检查所有值是否为true
。等效于Python的any
和all
。