julia - 通过在 Julia 中重复旧数组的某些行来创建一个新数组

标签 julia

假设我有一个数组:

julia> a = [1 1; 2 2; 3 3; 4 4; 5 5; 6 6; 7 7;]
7×2 Array{Int64,2}:
 1  1
 2  2
 3  3
 4  4
 5  5
 6  6
 7  7

然后我制作了一个向量,指定每一行在新数组中重复的次数:

julia> r = [0; 2; 0; 4; 0; 1; 0;]
7-element Array{Int64,1}:
 0
 2
 0
 4
 0
 1
 0

我想要的输出是:

julia> a_repeated = [2 2; 2 2; 4 4; 4 4; 4 4; 4 4; 6 6;]
7×2 Array{Int64,2}:
 2  2
 2  2
 4  4
 4  4
 4  4
 4  4
 6  6

我如何到达那里?我想我会使用 repeat功能,但我似乎无法理解 innerouter 是如何工作的。

最佳答案

使用 rep function from DataArrays.jl ,这个简单高效。不过,它在那里已被弃用,所以我会把它拿出来自己定义:

function rep(x::AbstractVector, lengths::AbstractVector{T}) where T <: Integer
    if length(x) != length(lengths)
        throw(DimensionMismatch("vector lengths must match"))
    end
    res = similar(x, sum(lengths))
    i = 1
    for idx in 1:length(x)
        tmp = x[idx]
        for kdx in 1:lengths[idx]
            res[i] = tmp
            i += 1
        end
    end
    return res
end

sample 一样,它适用于向量而不是矩阵,因此我们进行与 Sample rows from an array in Julia 中相同的歌舞表演。 .计算行的索引,然后使用它们索引到矩阵中:

julia> idxs = rep(axes(a, 1), r)
7-element Array{Int64,1}:
 2
 2
 4
 4
 4
 4
 6

julia> a[idxs, :]
7×2 Array{Int64,2}:
 2  2
 2  2
 4  4
 4  4
 4  4
 4  4
 6  6

关于julia - 通过在 Julia 中重复旧数组的某些行来创建一个新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41732818/

相关文章:

julia - 重载已被导入模块使用的函数名称

Julia:我们如何计算伴随或经典伴随(线性代数)?

julia - Julia 中推断的类型差异

optimization - Julia - 了解 JuMP Gurobi 输出

indexing - 如何在一行中更改大于5到5的数组元素?

julia - 在 Julia 中使用 ForwardDiff 进行自动微分

python - 从 Julia 中另一个数组中的特定列获取子数组

vector - 为什么 Julia 没有在函数中获取正确的数据?

julia @printf 改变我的变量

julia - 自定义订购的最大值