使用Julia使用in()和元组数组时出错

时间:2018-07-16 17:03:57

标签: julia

我有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。

预先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您是怎么得到coordY的?如果通过计算而不是直接分配获得它们,则即使它们显示正确,也可能不完全相同。例如:

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)