当前位置:  开发笔记 > 编程语言 > 正文

调整矩阵大小

如何解决《调整矩阵大小》经验,为你挑选了1个好方法。

我试图想出一种在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

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



1> tholy..:

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

J = Base.ReshapedArray(Jvec,(3,3), ())

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

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有