朱莉娅推!或追加!浮点值到整数数组

时间:2016-02-26 08:00:48

标签: append julia

我在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 个答案:

答案 0 :(得分:1)

我认为你无法通过append!实现这一点,因为在内部append! 使用unsafe_copy!,并且如文档所述:

  

此函数的不安全前缀表示未对指针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}

更多信息:

Conversion and Promotion

Arrays - vcat