朱莉娅不精确错误:Int64

St *_* Ax 4 error-handling dataframe julia

我是朱莉娅的新手。得到这个 InexactError 。提到我曾尝试预先转换为浮点数但没有奏效,也许我做错了什么。

column = df[:, i]  
max = maximum(column)
min = minimum(column)
scaled_column = (column .- min)/max   # This is the error, I think
df[:, i] = scaled_column
Run Code Online (Sandbox Code Playgroud)
julia> VERSION
v"1.4.2"
Run Code Online (Sandbox Code Playgroud)

Ste*_*ski 7

如果没有问题的最小工作示例,很难给出确定的答案,但一般来说,当您尝试将值转换为原始值不能的精确类型(如整数类型,但与浮点类型不同)时,会发生 InexactError被准确地代表。例如:

julia> convert(Int, 1.0)
1

julia> convert(Int, 1.5)
ERROR: InexactError: Int64(1.5)
Run Code Online (Sandbox Code Playgroud)

其他编程语言在这里任意选择了某种四舍五入方式(通常是截断,但有时四舍五入到最接近)。Julia 不会猜测,并要求您明确说明。如果您想圆形、截断、取天花板等,您可以:

julia> floor(Int, 1.5)
1

julia> round(Int, 1.5)
2

julia> ceil(Int, 1.5)
2
Run Code Online (Sandbox Code Playgroud)

回到你的问题:你没有convert在任何地方打电话,为什么你会收到转换错误?在多种情况下,Julia 会自动为您调用 convert,通常是当您尝试为键入的位置分配值时。例如,如果您有一个Ints数组并为其分配一个浮点值,它将自动转换:

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)
Run Code Online (Sandbox Code Playgroud)

所以这很可能发生在你身上:你通过做得到非整数值(column .- min)/max,然后你尝试将它分配到一个整数位置,你得到错误。