调整矩阵大小

Chr*_*kas 2 arrays memory-management julia

我试图想出一种在Julia中调整矩阵大小的高效方法.此矩阵仅用作某些方法中Jacobians的内部缓存,因此不需要以任何顺序保存其值(它们将立即被覆盖).我正在考虑直接生成一个向量,并使用矩阵作为该向量的重塑视图.然而,朱莉娅然后阻止我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
Run Code Online (Sandbox Code Playgroud)

并且也不会让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
Run Code Online (Sandbox Code Playgroud)

任何有关如何在不完全重新分配矩阵的情况下实现此目的的任何见解都是有帮助的.提前致谢.

tho*_*oly 6

你正在踩着一些危险的领域(警告是有原因的),但如果不是打电话给reshape(Jvec, 3, 3)

J = Base.ReshapedArray(Jvec,(3,3), ())
Run Code Online (Sandbox Code Playgroud)

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