调整矩阵大小

时间:2017-01-21 16:20:09

标签: arrays memory-management julia

我正在努力想出一种在Julia中调整矩阵大小的高效方法。此矩阵仅用作某些方法中Jacobians的内部缓存,因此不需要以任何顺序保存其值(它们将立即被覆盖)。我正在考虑直接生成一个向量,并使用矩阵作为该向量的重塑视图。然而,Julia然后阻止我resize!向量:

Jvec = zeros(9)
J = reshape(Jvec,3,3))
resize!(Jvec,16)


cannot resize array with shared data
 in resize!(::Array{Float64,1}, ::Int64) at ./array.jl:512
 in include_string(::String, ::String) at ./loading.jl:441
 in eval(::Module, ::Any) at ./boot.jl:234
 in (::Atom.##67#70)() at /home/crackauc/.julia/v0.5/Atom/src/eval.jl:40
 in withpath(::Atom.##67#70, ::Void) at /home/crackauc/.julia/v0.5/CodeTools/src/utils.jl:30
 in withpath(::Function, ::Void) at /home/crackauc/.julia/v0.5/Atom/src/eval.jl:46
 in macro expansion at /home/crackauc/.julia/v0.5/Atom/src/eval.jl:109 [inlined]
 in (::Atom.##66#69)() at ./task.jl:60

也不会让我resize!带有视图的向量(希望之后只创建一个新视图):

J = 0
resize!(Jvec,16)

cannot resize array with shared data
 in resize!(::Array{Float64,1}, ::Int64) at ./array.jl:512
 in include_string(::String, ::String) at ./loading.jl:441
 in eval(::Module, ::Any) at ./boot.jl:234
 in (::Atom.##67#70)() at /home/crackauc/.julia/v0.5/Atom/src/eval.jl:40
 in withpath(::Atom.##67#70, ::Void) at /home/crackauc/.julia/v0.5/CodeTools/src/utils.jl:30
 in withpath(::Function, ::Void) at /home/crackauc/.julia/v0.5/Atom/src/eval.jl:46
 in macro expansion at /home/crackauc/.julia/v0.5/Atom/src/eval.jl:109 [inlined]
 in (::Atom.##66#69)() at ./task.jl:60

有关如何在不完全重新分配矩阵的情况下完成此任务的任何见解都是有帮助的。提前谢谢。

2 个答案:

答案 0 :(得分:5)

你在某个危险的地方踩踏(警告是有原因的),但如果不是打电话给你override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) if self.isMovingFromParentViewController() { //View controller was popped //Remove any observer. } }

reshape(Jvec, 3, 3)

然后它可能会像你希望的那样工作。

答案 1 :(得分:3)

julia> J = rand(3,3);

julia> Jvec = vec(J);

julia> resize!(Jvec, 4*4);

julia> J = reshape(Jvec, (4,4));

julia> Jvec = vec(J);

julia> resize!(Jvec, 5*5);

julia> J = reshape(Jvec, (5,5))

等工作。