在 Julia 中连接数组

Posted

技术标签:

【中文标题】在 Julia 中连接数组【英文标题】:Concatenating arrays in Julia 【发布时间】:2017-01-27 22:47:21 【问题描述】:

如果Int这两个数组分别是a = [1;2;3]b = [4;5;6],我们如何在两个维度上连接这两个数组?预期的输出是,

julia> out1
6-element ArrayInt64,1:
 1
 2
 3
 4
 5
 6

julia> out2
3x2 ArrayInt64,2:
 1  4
 2  5
 3  6

【问题讨论】:

Concatenate 2 Julia Arrays without modifying them的可能重复 【参考方案1】:

使用vcathcat 函数:

julia> a, b = [1;2;3], [4;5;6]
([1,2,3],[4,5,6])

help?> vcat
Base.vcat(A...)

   Concatenate along dimension 1

julia> vcat(a, b)
6-element ArrayInt64,1:
 1
 2
 3
 4
 5
 6

help?> hcat
Base.hcat(A...)

   Concatenate along dimension 2

julia> hcat(a, b)
3x2 ArrayInt64,2:
 1  4
 2  5
 3  6

【讨论】:

【参考方案2】:

方括号可用于连接:

julia> a, b = [1;2;3], [4;5;6]
([1,2,3],[4,5,6])

julia> [a; b]
6-element ArrayInt64,1:
 1
 2
 3
 4
 5
 6

julia> [a b]
3×2 ArrayInt64,2:
 1  4
 2  5
 3  6

【讨论】:

这是vcathcat 的语法糖:[e.head for e in [:([a; b]), :([a b])]] # Symbol[:vcat,:hcat] 一般我认为vcathcat 应该是首选,因为这个解决方案是空白敏感的。例如:[a - b] vcat[a -b]hcat。这可能是一个令人讨厌的错误。 似乎有点落后于更喜欢语法糖版本。毕竟,for 的糖是什么?你是说这个语法可能会被删除?【参考方案3】:

您可以使用cat 函数沿任意维度连接任意数量的数组。第一个输入是执行连接的维度;其余的输入是您希望连接在一起的所有数组

a = [1;2;3]
b = [4;5;6]

## Concatenate 2 arrays along the first dimension
cat(1,a,b)
6-element ArrayInt64,1:
 1
 2
 3
 4
 5
 6

## Concatenate 2 arrays along the second dimension
cat(2,a,b)
3x2 ArrayInt64,2:
 1  4
 2  5
 3  6

## Concatenate 2 arrays along the third dimension
cat(3,a,b)
3x1x2 ArrayInt64,3:
[:, :, 1] =
 1
 2
 3

[:, :, 2] =
 4
 5
 6

【讨论】:

更新的版本需要dims 关键字,例如cat(a,b,dims=3)【参考方案4】:

遇到ArrayArray,1时,语法有点不同,像这样:

julia> a=[[1,2],[3,4]]
2-element ArrayArrayInt64,1,1:
 [1, 2]
 [3, 4]

julia> vcat(a)
2-element ArrayArrayInt64,1,1:
 [1, 2]
 [3, 4]

julia> hcat(a)
2×1 ArrayArrayInt64,1,2:
 [1, 2]
 [3, 4]

julia> vcat(a...)
4-element ArrayInt64,1:
 1
 2
 3
 4

julia> hcat(a...)
2×2 ArrayInt64,2:
 1  3
 2  4

参考:

... 在函数定义中将许多参数组合成一个参数 在函数定义的上下文中, ... 运算符用于将许多不同的参数组合成一个参数。使用 ... 将许多不同的参数组合成一个参数称为 slurping

【讨论】:

以上是关于在 Julia 中连接数组的主要内容,如果未能解决你的问题,请参考以下文章

连接 R 和 Julia?

Julia TCP 服务器和连接

在 Julia 中加入 DataFrame

行绑定Julia数据帧

如何在 Julia 中编写 WebSocket 客户端?

Julia - 短路求值