如何在Julia中按行填充数组

4
我希望能够在Julia语言中按行填充数组对象。但是reshape函数想要按列填充(Julia是列优先的) 。
julia> reshape(1:15, 3,5)
3x5 Array{Int64,2}:
 1  4  7  10  13
 2  5  8  11  14
 3  6  9  12  15

有没有办法让它按行填充?感觉应该有一个明显的答案,但我还没有找到。
3个回答

5

一个建议:

julia> reshape(1:15, 5, 3) |> transpose
3x5 Array{Int64,2}:
  1   2   3   4   5
  6   7   8   9  10
 11  12  13  14  15

谢谢,|> 有一个名称吗?这样我就可以在 Google 上了解更多相关信息了。 - conjectures
管道?函数组合?文档 - daycaster
2
reshape(1:15, 5, 3) |> transpose 只是另一种写法,等同于 transpose(reshape(1:15, 5, 3)) - Daniel Arndt

5

使用数组推导:

julia> [i+5*j for j=0:2,i=1:5]
3x5 Array{Int64,2}:
  1   2   3   4   5
  6   7   8   9  10
  11  12  13  14  15

啊,它比其它建议快了超过10倍(实际上,在我的初始基准测试中尴尬地快了100倍)。

当元素以Array的形式存在时,该方法应如何修改,例如 A = ['a', 'b', 'c', 'd', 'e', 1, 2, 3, 4, 5, 1., 2., 3., 4., 5.]?(不同类型的元素仅用于强调,而非减缓处理速度) - amrods
1
没关系,只需要将它应用到A的索引上:[A[i + 5 * j] for j = 0:2, i = 1:5]。这就是小技巧... - amrods
赶上我了...我正要写这个! - Dan Getz
但我的总体印象是推导式较慢。 - amrods
1
实际上,它们通常很快,而且需要较少的分配(transpose会进行复制)。 - Dan Getz

2

permutedims 是处理更一般的多维数组时的另一个选择。

julia> permutedims(reshape(1:24, 2,3,4), [2,1,3])
3x2x4 Array{Int64,3}:
[:, :, 1] =
 1  2
 3  4
 5  6

[:, :, 2] =
  7   8
  9  10
 11  12

[:, :, 3] =
 13  14
 15  16
 17  18

[:, :, 4] =
 19  20
 21  22
 23  24

然而,在您特定的情况下,它是所有建议中最慢的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接