检查Julia数组中的所有值?

时间:2016-08-29 23:13:01

标签: arrays julia

如何一次检查Julia数组中的所有值?让我们说我有一个类似a=[3,4,6,10,55,31,9,10]的数组如何检查数组是否有大于10的值?或者我如何检查是否有重复值(例如样本中包含两次的10个?我知道我可以编写循环来检查这一点,但我认为Julia可以更快地检查所有值。

3 个答案:

答案 0 :(得分:8)

函数anycount执行此操作:

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)

您还可以使用广播操作。在某些情况下,它的语法比anycount更好,在其他情况下,它可能不那么明显:

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的anyall