调整大小朱莉娅

时间:2018-08-20 04:49:14

标签: arrays vector julia

所以我试图像这样在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},:: Int64)在./array.jl:549   [2]位于./In[70]:7的宏扩展[内联] [3]位于   ./:?

请帮忙吗?

1 个答案:

答案 0 :(得分:2)

您的代码有两个问题。

问题1 resize!更改矢量的大小,但不初始化其元素。如果vector的元素类型为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 。您的代码无法在Julia 1.0下运行,因为您正在尝试在循环内修改全局变量(例如,a行中的a += 1)。将您的代码包装在一个函数或let块中,以使其不会引发错误。