重复数组行指定次数

avs*_*avs 3 arrays julia

Julia 的新手,所以这可能很容易。

我有一个 n×m 数组和一个长度为 n 的向量,并且想要在向量的相应元素中重复数组的每一行的次数。例如:

mat = rand(3,6)
v = vec([2 3 1])
Run Code Online (Sandbox Code Playgroud)

结果应该是一个 6×6 数组。我试过这个repeat功能但是

repeat(mat, inner = v)
Run Code Online (Sandbox Code Playgroud)

6×18×1 Array{Float64,3}:而是产生一个数组,因此它需要v是重复元素的维度。在 matlab 中我会使用repelem(mat, v, 1),我希望 julia 提供类似的东西。我的实际矩阵要大得多,我将不得不多次调用该函数,因此此操作需要尽可能快。

Bog*_*ski 5

已经讨论过向 Julia Base 添加类似的东西,但目前它还没有实现 AFAIK。您可以使用inverse_rleStatsBase.jl 中的函数实现您想要的功能:

julia> row_idx = inverse_rle(axes(v, 1), v)
6-element Array{Int64,1}:
 1
 1
 2
 2
 2
 3
Run Code Online (Sandbox Code Playgroud)

现在你可以写:

mat[row_idx, :]
Run Code Online (Sandbox Code Playgroud)

或者

@view mat[row_idx, :]
Run Code Online (Sandbox Code Playgroud)

(第二个选项创建一个视图,如果您说您的用例mat很大并且您需要多次进行此类索引,则该视图可能与您的用例相关- 哪个选项更快将取决于您的确切用例)。