【问题标题】:Concatenating arrays of mutable structs连接可变结构的数组
【发布时间】:2019-04-03 15:54:43
【问题描述】:

假设我有一个可变结构:

mutable struct a
    x :: Float64
end

无论出于何种原因,我想连接我的a 的矩阵和向量:

b = Matrix{a}(undef, (0, 2))
c = [a(2.), a(3.)]
vcat(b, c)    # ERROR: ArgumentError: number of columns of each array 
# must match (got (2, 1))

如何将我的向量 c 添加为 b 底部的新行?

注意:我意识到c 应该是一个行向量,但是运算符'(即c')不能应用于Vector{a},这是问题的一部分。

【问题讨论】:

    标签: matrix julia


    【解决方案1】:

    有几种方法可以做到:

    vcat(b, reshape(c, 1, 2))
    

    vcat(b, permutedims(c))
    

    vcat(b, [v for _ in 1:1, v in c])
    

    特别是permutedims 类似于transpose,但它不是递归的(与transpose 相对)。

    您还可以首先将c 创建为矩阵:

    c = [a(2.) a(3.)]
    

    在这种情况下,vcat(b, c) 可以正常工作。

    【讨论】:

    • 你的回答更好。我迟到了 9 秒 :)
    • 但是,最好强调一下如何创建行矩阵,因为这是最简单的:)。
    【解决方案2】:

    您的c 不是行向量,而是列向量。以下作品:

    b = Matrix{a}(undef, (0, 2))
    c = [a(2.) a(3.)] # left out the comma here to generate a size (1,2) object
    vcat(b, c)
    

    【讨论】:

    • 我知道 c 需要是问题中所述的行向量。您不能像使用 Float64 矩阵那样使用 c',而是展示如何将 c 转换为行向量作为可能的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2023-03-04
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多