gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:07:53 24 4
gpt4 key购买 nike

假设我有一个数组:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com