如何测试数组中的所有元素在Julia中是否具有相同的值

时间:2019-12-20 13:41:12

标签: julia

我正在尝试编写一个简单的程序,该程序使用Julia来测试数组的所有元素是否相同。朱莉娅有没有简单的方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

allunique测试数组的所有元素是否都是 unique 。为了测试数组的所有元素是否相同,您可以编写例如:

function allequal(itr)
    local x
    isfirst = true
    for v in itr
        if isfirst
            x = v
            isfirst = false
        else
            isequal(x, v) || return false
        end
    end
    return true
end

现在您拥有

julia> allequal([1,2,3])
false

julia> allequal([1,2,1])
false

julia> allequal([1,1,1])
true

您可以编写一个较短的函数,例如:

f1(itr) = length(Set(itr)) <= 1

但是它可能会变慢(我还没有运行基准测试)。

或者您可以编写如下内容:

f2(itr) = length(itr) == 0 ? true : all(isequal(itr[1]), itr)

如果您的迭代器已定义length并支持索引。

答案 1 :(得分:0)

length(itr)==0 || all( ==(itr[1]), itr)

这似乎比建议的allequal函数快3倍。

一些基准:

julia> allequal_2(itr) = length(itr)==0 || all( ==(itr[1]), itr);

julia> const vv = ones(10000000)*3;

julia> @btime allequal($vv)
  13.212 ms (0 allocations: 0 bytes)
true

julia> @btime allequal_2($vv)
  4.178 ms (0 allocations: 0 bytes)
true

更有趣的是,它比拟议的非常相似的f2函数要快2倍:

julia> @btime f2($vv)
  9.509 ms (0 allocations: 0 bytes)