【问题标题】:Add vector as row to matrix in Julia在 Julia 中将向量作为行添加到矩阵
【发布时间】:2019-04-16 18:51:22
【问题描述】:

我的 Julia 代码中有一个向量和一个矩阵(Array{T,1} 和 Array{T,2}),我想附加它们,使向量成为矩阵中的新行(应该是第一排)。我尝试了几种方法(cat 等),但不断收到错误,我认为这些错误与数据的不同形状有关。请参阅下面的示例。

julia> v = Vector([1, 2, 3])
3-element Array{Int64,1}:
 1
 2
 3

julia> m = Matrix([4 5 6; 7 8 9])
2×3 Array{Int64,2}:
 4  5  6
 7  8  9

julia> cat(v,m,dims=(1,2))
5×4 Array{Int64,2}:
 1  0  0  0
 2  0  0  0
 3  0  0  0
 0  4  5  6
 0  7  8  9

我真正想要的是

1 2 3
4 5 6
7 8 9

我意识到我可以使用 transpose(v) 来解决这个问题,但我希望避免额外的调用。

谢谢!

【问题讨论】:

  • 据我所知这是不可能的(Julia 在这里很严格,将法线向量视为列向量)。请注意,transpose 是高效的,因为它不会分配新的向量。
  • 谢谢,也许答案就是使用transpose。我没有意识到它没有创建一个新的向量。
  • 同样简单的'在大多数情况下应该足够好(它是伴随操作,但如果你不使用复数,它应该可以使用并且更短)。
  • 没有必要使用VectorMatrix 构造函数。 [1,2,3] 已经是一个向量,m 也是如此。构造函数调用是完全多余的,最坏的情况是做额外的工作。

标签: julia


【解决方案1】:

只要能把 v 的构造改为 1 x 3 数组,就可以避免转置:

julia> v = [1 2 3]
1×3 Array{Int64,2}:
1  2  3

julia> m = [4 5 6; 7 8 9]
2×3 Array{Int64,2}:
4  5  6
7  8  9

julia> vcat(v, m)
3×3 Array{Int64,2}:
1  2  3
4  5  6
7  8  9

我认为只是做转置

julia> v2 = [1, 2, 3]
3-element Array{Int64,1}:
1
2
3

julia> vcat(v2', m)
3×3 Array{Int64,2}:
1  2  3
4  5  6
7  8  9

虽然几乎一样有效。

【讨论】:

  • 谢谢。但是,我只是用这个简单的例子来回答这个问题。在实际代码中我没有这个选项。
猜你喜欢
  • 2012-08-11
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
相关资源
最近更新 更多