所以我试图调整Julia中向量的大小,如下所示:
A = [Vector{Any}() for i in 1:6]
a, b, c, d, e, f, g, h = 3, 4, 5, 6, 7, 8, 9, 10
for tt = 1:6
a+=1
resize!(A[tt], a)
for rr = 1:a
b+=1
resize!(A[tt][rr], b)
for tt2 = 1:b
resize!(A[tt][rr][tt2], b)
end
end
end我得到了这个错误:
UndefRefError:对未定义引用的访问 Stacktrace: 1个getindex(::Array{Any,1},::Any 64) at ./array.jl:549 2宏展开,在./In70:7内联匿名的./:?
有什么帮助吗?
发布于 2018-08-20 06:48:18
您的代码有两个问题。
问题1. resize!改变了向量的大小,但没有初始化它的元素。如果向量具有元素类型Any,则条目将为#undef,这意味着未初始化。您必须先初始化它们,然后再访问。
下面是一个示例:
julia> A = Any[]
0-element Array{Any,1}
julia> resize!(A, 1)
1-element Array{Any,1}:
#undef
julia> resize!(A[1], 1) # you get an error
ERROR: UndefRefError: access to undefined reference
Stacktrace:
[1] getindex(::Array{Any,1}, ::Int64) at .\array.jl:549
julia> A[1] = Any[]
0-element Array{Any,1}
julia> A
1-element Array{Any,1}:
Any[]
julia> resize!(A[1], 1) # now it works
1-element Array{Any,1}:
#undef
julia> A
1-element Array{Any,1}:
Any[#undef]问题2.您的代码将无法在Julia1.0下工作,因为您正在试图修改循环中的全局变量(例如,a行a += 1)。将代码包装到函数或let块中,使其不引发错误。
https://stackoverflow.com/questions/51924323
复制相似问题