一个简单例子:
#建立一个可以容纳整型和浮点型数的数组
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了。
一个简单例子:
#建立一个可以容纳整型和浮点型数的数组
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了。
这行代码重新定义了一个新变量 A
,A
的类型和前一行无关。你在执行
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