我是Julia的新人。得到了这个InexactError。提到我已经尝试过将其转换为float了,但是它没有用,也许我做错了。
column = df[:, i]
max = maximum(column)
min = minimum(column)
scaled_column = (column .- min)/max # This is the error, I think
df[:, i] = scaled_column
julia> VERSION
v"1.4.2"
答案 0 :(得分:4)
很难给出肯定的答案,而没有给出问题的最小示例,但是通常,当您尝试将值转换为精确类型(例如整数类型,但不同于浮点类型)时,会发生InexactError原始值无法准确表示。例如:
julia> convert(Int, 1.0)
1
julia> convert(Int, 1.5)
ERROR: InexactError: Int64(1.5)
其他编程语言在这里任意选择某种舍入方式(通常是截断但有时舍入到最接近)。茱莉亚(Julia)不会猜测,要求您保持露骨。如果要舍入,截断,设置天花板等,可以执行以下操作:
julia> floor(Int, 1.5)
1
julia> round(Int, 1.5)
2
julia> ceil(Int, 1.5)
2
回到您的问题:您没有在任何地方致电convert
,为什么会遇到转换错误?在多种情况下,Julia会为您自动调用convert,通常是在您尝试将值分配给键入位置时。例如,如果您有一个Int
数组,并为其分配了浮点值,则该值将自动转换:
julia> v = [1, 2, 3]
3-element Array{Int64,1}:
1
2
3
julia> v[2] = 4.0
4.0
julia> v
3-element Array{Int64,1}:
1
4
3
julia> v[2] = 4.5
ERROR: InexactError: Int64(4.5)
这很可能发生在您身上:您通过执行(column .- min)/max
获得非整数值,然后尝试将其分配到整数位置,并得到错误。
答案 1 :(得分:1)
作为旁注,您可以使用transform!
来实现所需的目标:
transform!(df, i => (x -> (x .- minimum(x)) ./ maximum(x)) => i)
,此操作将替换该列。