【问题标题】:Julia: Append Array of Matrices with MatrixJulia:用矩阵追加矩阵数组
【发布时间】:2016-05-17 09:25:13
【问题描述】:

假设我有一个名为 A 的矩阵数组。

Array{Array{Float64,2},1},

如果我创建另一个矩阵,例如 eye(3),我可以用 push!(A,eye(3)) 将它附加到末尾。然而,这修改了我不想要的 A。理想情况下,我正在寻找一些语法糖,例如

B=[A;eye(3)]

其中 B 是 Array{Array{Float64,2},1} 类型,B[end] 是 eye(3),length(B) 是 length(A)+1。

但是,这种语法 B=[A;eye(3)] 不起作用。 有人能指出我正确的方向吗?

【问题讨论】:

    标签: arrays julia


    【解决方案1】:

    在 v0.4.5 和 v0.5(主)中,您可以简单地执行以下操作:

    B = push!(copy(A), eye(3))

    【讨论】:

      【解决方案2】:

      我认为答案可能取决于您使用的 Julia 版本。

      对于 v0.4.x,正如您所指出的,方括号连接失败。这是因为语法字面意思是:创建一个新向量,其中第一个元素是A,第二个元素是eye(3)。由于AArray{Array{Float64,2},1} 类型,而eye(3)Array{Float64, 2} 类型,因此操作失败。

      为了正确连接,您需要确保连接相同类型的对象。最简单的方法是将eye(3) 转换为Array{Array{Float64,2},1} 类型,然后执行连接。有几种方法可以做到这一点。就我个人而言,我通常只使用理解,例如

      B = [A ; Matrix{Float64}[ eye(3) for n = 1:1 ]]
      

      注意B仍然指的是A,所以例如B[1][1,1] = 0.0也会调整原来A的内容。如果您希望B 成为真正独立的副本,那么您需要:

      B = [deepcopy(A) ; Matrix{Float64}[ eye(3) for n = 1:1 ]]
      

      我认为有一种更简洁的方法可以在 master 分支 (v0.5) 上完成所有这些工作,但我自己仍在使用 v0.4.x。我认为在 v0.5 中,您可以通过 [eye(3)] 获得 Array{Array{Float64,2},1}

      【讨论】:

        猜你喜欢
        • 2023-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-19
        • 2017-04-20
        • 1970-01-01
        相关资源
        最近更新 更多