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