我有2个元组数组,并且有一个循环询问一个元素是否在另一个元素中。 在每一步,我都要询问是否在coord数组中包含的元组在Y数组中。除了一个我无法解释原因的元素之外,该循环工作正常。这就是我所拥有的:
Y[55:65] # This is the array I want to check at each step if my state is in or not.
11个元素的数组{Any,1}:(2.0,1.0)(3.0,1.0)(4.0,1.0)(5.0, 1.0)(6.0,1.0)(7.0,1.0)(8.0,1.0)(9.0,1.0)(10.0,1.0)(11.0,1.0)(12.0,1.0)
coord[i-1] # this is one element of coord that is in Y
0维数组{元组{Float64,Float64},0} :( 6.0,1.0)
coord[i] # this is an other element of coord that is in Y
0维数组{元组{Float64,Float64},0} :( 7.0,1.0)
但是当我测试它们在Y方向时:
in(coord[i],Y[55:65]) # testing if coord[i] is in Y
false
in(coord[i-1],Y[55:65]) # testing if coord[i-1] is in Y
true
我不明白:它们在Y中以相同的方式表示,它们具有相同的类型,为什么我要使用in()而不是另一个在其中?
我使用的是Julia版本0.6.3。
预先感谢您的帮助!
答案 0 :(得分:1)
您是怎么得到coord
和Y
的?如果通过计算而不是直接分配获得它们,则即使它们显示正确,也可能不完全相同。例如:
julia> p1 = fill((6.0, 1.0))
0-dimensional Array{Tuple{Float64,Float64},0}:
(6.0, 1.0)
julia> p2 = fill((7.0 + 3eps(), 1.0))
0-dimensional Array{Tuple{Float64,Float64},0}:
(7.000000000000001, 1.0)
julia> Y = [p1, p2]
2-element Array{Array{Tuple{Float64,Float64},0},1}:
(6.0, 1.0)
(7.0, 1.0) # NOTE that it get truncated in display but the content did not changed!
julia> x = fill((6.0, 1.0))
0-dimensional Array{Tuple{Float64,Float64},0}:
(6.0, 1.0)
julia> x in Y
true
julia> x = fill((7.0, 1.0))
0-dimensional Array{Tuple{Float64,Float64},0}:
(7.0, 1.0)
julia> x in Y
false
在这种情况下,您可以在比较之前进行四舍五入,或者使用in
(或isapprox
运算符(由{{1}在Julia中键入)手动操作≈
函数} + Tab)