我在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
如何将这些值添加到此数组?
答案 0 :(得分:1)
我认为你无法通过append!
实现这一点,因为在内部append!
使用unsafe_copy!
,并且如文档所述:
此函数的不安全前缀表示未对指针dest和src执行验证以确保这一点 它们是有效的。使用不正确可能会破坏或段落您的程序,方式与C。
相同
在以下示例中可以看到此行为,即使使用
错误消息InexactError
,a
向量的内容无效。
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}
。
更多信息: