【发布时间】:2018-12-24 07:06:55
【问题描述】:
我有 2 个元组数组,我有一个循环询问一个元素是否在另一个元素中。 在每一步我都会询问坐标数组中包含的元组是否在 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维数组{Tuple{Float64,Float64},0}: (6.0, 1.0)
coord[i] # this is an other element of coord that is in Y
0维数组{Tuple{Float64,Float64},0}: (7.0, 1.0)
但是当我测试它们在 Y 时:
in(coord[i],Y[55:65]) # testing if coord[i] is in Y
假
in(coord[i-1],Y[55:65]) # testing if coord[i-1] is in Y
是的
我不明白:它们在 Y 中都以相同的方式表示,它们具有相同的类型,为什么我使用 in() 得到一个在而不是另一个?
我使用 Julia 版本 0.6.3。
提前感谢您的帮助!
【问题讨论】:
-
很可能
Y[55:65]包含包装在 0 维数组中的(7.0, 1.0),而(6.0, 1.0)未包装。它们以相同的方式打印,因此仅使用目视检查很难区分它们。但这可能是这种情况,因为Y[55:65]是Vector{Any},所以它似乎包含混合类型。你能发布typeof.(Y[55:65])的结果吗? -
感谢您的帮助。
typeof.(Y[55:65])给:11-element Array{DataType,1}: Array{Tuple{Float64,Float64},0} Array{Tuple{Float64,Float64},0} Array{Tuple{Float64,Float64},0} Array{Tuple{Float64,Float64},0} Array{Tuple{Float64,Float64},0} Array{Tuple{Float64,Float64},0} Array{Tuple{Float64,Float64},0} Array{Tuple{Float64,Float64},0} Array{Tuple{Float64,Float64},0} Array{Tuple{Float64,Float64},0} Array{Tuple{Float64,Float64},0} -
我找不到这两个有什么区别。
-
好像类型是一样的。那么
Y[60] == coord[i]比较返回什么?如果是false,那么Y[60][][1] == coord[i][][1]和Y[60][][2] == coord[i][][2]会返回什么?如果这两个返回false中的任何一个,则实际上元组的条目不相等(如果您使用Float64可能会发生这种情况,因为四舍五入)。 -
感谢您的帮助,是的,我意识到这些值确实不完全相等,但机器精度不同。这很奇怪,因为我做了类似 7/100*100 的事情,我没想到会发生这种情况!谢谢
标签: julia