我试图想出一种在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
并且也不会让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
任何有关如何在不完全重新分配矩阵的情况下实现此目的的任何见解都是有帮助的.提前致谢.
你正在踩着一些危险的领域(警告是有原因的),但如果不是打电话给reshape(Jvec, 3, 3)
你
J = Base.ReshapedArray(Jvec,(3,3), ())
然后它可能会像你希望的那样工作.