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 提供类似的东西。我的实际矩阵要大得多,我将不得不多次调用该函数,因此此操作需要尽可能快。
已经讨论过向 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很大并且您需要多次进行此类索引,则该视图可能与您的用例相关- 哪个选项更快将取决于您的确切用例)。