问一个数组的数值类型转换问题

一个简单例子:

#建立一个可以容纳整型和浮点型数的数组
A=zeros(Union{Int,Float64}, 2)

A=[1,2] #这时数组类型就变成Int了。如果这里是A[1], A[2]=1, 2,数组类型不变,下面不会报错。但我实际处理的数组比这个大得多

A[2]=2.3 #报错, InexactError: Int64(2.3)

怎样在数组赋值为整型后,仍然可以让它正常接受浮点数的赋值?赋值为整型后,整个数组的类型就变成Int而不是原来的Union了。

这行代码重新定义了一个新变量 AA 的类型和前一行无关。你在执行

A=zeros(Union{Int,Float64}, 2)

后,再进行 A[[1,2]] = [1,2]; A[2] = 2.3 是不会报错的。

另外,非常不建议定义类型不稳定的数据,参看之前类似的帖子

同楼上,A被重新定义了。

julia>A = zeros(Union{Int64,Float64},2)
2-element Vector{Union{Float64, Int64}}:
 0
 0

julia> B = A  # 定义B=A
2-element Vector{Union{Float64, Int64}}:
 0
 0

julia> typeof(A)
Vector{Union{Float64, Int64}} (alias for Array{Union{Float64, Int64}, 1})

julia> typeof(B)
Vector{Union{Float64, Int64}} (alias for Array{Union{Float64, Int64}, 1})

julia> A[1] = 1, A[2] = 0.5;

julia> B  #  元素赋值,B=A
2-element Vector{Union{Float64, Int64}}: 
 1
 0.5

julia> A = [1,2]  # 重新定义A,即新数组[1,2]与变量A绑定
2-element Vector{Int64}:
 1
 2

julia> B  # B不变
2-element Vector{Union{Float64, Int64}}:
 1
 0.5