Julia push!或append!将浮点值添加到整数数组

4

我在 Julia 中有一个整数向量,我想要将一个浮点数值推入它,或者将一组浮点数值附加到它上面,但是当我尝试这样做时,Julia 会抛出错误:

julia> v = [1,2,3]
3-element Array{Int64,1}:
 1
 2
 3

julia> push!(v, 4.5)
ERROR: InexactError()
 in push! at array.jl:432

julia> append!(v, [4.5, 5.2, 3.1])
ERROR: InexactError()
 in copy! at abstractarray.jl:344
 in append! at array.jl:447

我该如何将这些值添加到此数组中?

1
你是想要将你的整数配对地添加小数位,还是将小数位附加到整数向量的末尾? - niczky12
我已根据@Gomiero的问题解释编辑了问题。如果不是,请澄清。 - StefanKarpinski
1个回答

3
我认为您无法使用append!实现此目标,因为在内部,append!使用了unsafe_copy!,正如文档所说:

此函数的unsafe前缀表示不对指针dest和src执行任何验证以确保它们是有效的。使用不当可能会破坏或使程序崩溃,就像C一样。

在下面的示例中,可以看到这种行为,即使出现错误消息InexactErrora向量的内容也变得无效。
julia> a=[1,2,3]
3-element Array{Int64,1}:
 1
 2
 3

julia> append!(a,[3.14, 6.66, 1.61])
ERROR: InexactError()
 in copy! at abstractarray.jl:344
 in append! at array.jl:447

julia> a
6-element Array{Int64,1}:
                   1
                   2
                   3
 9223372036854775807
                  18
                  -1

最安全的方法是使用vcat进行连接,如下所示:
julia> a=[1,2,3]
3-element Array{Int64,1}:
 1
 2
 3

julia> a=vcat(a, [3.14, 6.66, 1.61])
6-element Array{Float64,1}:
 1.0
 2.0
 3.0
 3.14
 6.66
 1.61

或者:

julia> a=[1,2,3]
3-element Array{Int64,1}:
 1
 2
 3

julia> a=[a; [dec(3), "6.66", "test"]]
6-element Array{Any,1}:
 1
 2
 3
  "3"
  "6.66"
  "test"

请注意,在连接后,数组将晋升为新类型(分别为Array{Float64,1}Array{Any,1})。
更多信息: 转换和晋升 数组 - vcat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接