我正在尝试想出一种在 Julia 中调整矩阵大小的高效方法。该矩阵仅用作某些方法内部雅可比行列式的内部缓存,因此不需要以任何顺序保留其值(它们将立即被覆盖)。我正在考虑直接生成一个向量并使用该矩阵作为该向量的 reshape View 。然而,Julia 随后阻止我调整大小!
调整向量:
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
并且也不会让我调整大小!
View 消失的矢量(希望之后创建一个新 View ):
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), ())
然后它可能会如您所希望的那样工作。
关于arrays - 调整矩阵大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41781621/