在Julia中重复或平铺n维数组

12

我正在寻找一种通用的函数,可以将矩阵沿任意数量的维度和任意次数重复。Python和Matlab中都有这些功能,分别是NumPy的tile和Matlab的repmat函数。但是,Julia的repmat函数似乎仅支持2维数组。

该函数应该像这样:repmatnd(a, (n1,n2,...,nk))。其中a是任意维度的数组,第二个参数是一个元组,用于指定在每个维度k上重复数组的次数。

有什么想法可以在Julia中实现大于2维的矩阵重复吗?在Python中,我会使用np.tile,在Matlab中使用repmat,但是Julia中的repmat函数仅支持2维数组。

例如:

x = [1 2 3]
repmatnd(x, 3, 1, 3)

会导致:

1 2 3
1 2 3
1 2 3

1 2 3
1 2 3
1 2 3

1 2 3
1 2 3
1 2 3

并为了

x = [1 2 3; 1 2 3; 1 2 3]
repmatnd(x, (1, 1, 3))

会产生与以前相同的结果。我想Julia开发人员将在标准库中实现类似这样的东西,但在那之前,有一个修复程序会很好。


1
我相信repeat函数可能是你正在寻找的: http://docs.julialang.org/en/latest/stdlib/linalg/#Base.repeat。抱歉我一直用评论回答 - 没有时间/精力来编写带有例子和所有细节的完整答案。 - StefanKarpinski
1个回答

15

使用repeat

julia> X = [1 2 3]
1x3 Array{Int64,2}:
 1  2  3

julia> repeat(X, outer = [3, 1, 3])
3x3x3 Array{Int64,3}:
[:, :, 1] =
 1  2  3
 1  2  3
 1  2  3

[:, :, 2] =
 1  2  3
 1  2  3
 1  2  3

[:, :, 3] =
 1  2  3
 1  2  3
 1  2  3

2
因为repmat是最初的函数,然后才添加了repeatRepeat也比repmat更通用,因为它支持内部重复和外部重复。 - John Myles White

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