gpt4 book ai didi

julia - 如何打乱一系列数字,然后将其拆分为特定长度的子数组?

转载 作者:行者123 更新时间:2023-12-03 20:26:21 29 4
gpt4 key购买 nike

假设我有一个范围 1:N ,我想将范围打乱成随机顺序,然后将结果打乱的数组拆分为最多 128 的子数组。元素长。我怎样才能做到这一点?

这个问题是基于 JuliaLang 松弛 channel 上出现的一个问题。

最佳答案

函数shuffle来自 Random标准库可用于将容器随机排列:

julia> using Random: shuffle

julia> shuffle(1:10)
10-element Array{Int64,1}:
6
9
3
2
10
1
8
7
5
4

函数 Iterators.partition来自 Julia 的 Base可用于以固定长度的块对可迭代对象进行迭代:
julia> using Base.Iterators: partition

julia> partition(1:20, 7)
Base.Iterators.PartitionIterator{UnitRange{Int64}}(1:20, 7)

然而, partition默认情况下返回一个惰性迭代器,所以如果我们想实现实际结果,我们需要 collect它:
julia> collect(partition(1:20, 7))
3-element Array{UnitRange{Int64},1}:
1:7
8:14
15:20

把这一切放在一起,我们有
julia> using Random: shuffle

julia> using Base.Iterators: partition

julia> shuffle_partition(N; chunk_size=128) = (collect ∘ partition)(shuffle(1:N), chunk_size)
shuffle_partition (generic function with 1 method)

julia> shuffle_partition(503)
4-element Array{SubArray{Int64,1,Array{Int64,1},Tuple{UnitRange{Int64}},true},1}:
[313, 51, 117, 373, 381, 340, 342, 415, 423, 453 … 201, 178, 167, 242, 2, 76, 146, 439, 363, 448]
[115, 121, 306, 440, 295, 181, 30, 280, 388, 227 … 362, 39, 317, 171, 55, 214, 261, 251, 96, 9]
[486, 248, 161, 319, 325, 176, 80, 369, 434, 209 … 442, 350, 273, 419, 130, 305, 192, 482, 265, 234]
[460, 31, 400, 466, 220, 447, 119, 446, 198, 141 … 226, 438, 74, 152, 203, 303, 378, 231, 458, 194]

julia> length.(ans)
4-element Array{Int64,1}:
128
128
128
119

这个答案基于在 Slack 上找到的答案。

关于julia - 如何打乱一系列数字,然后将其拆分为特定长度的子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60557139/

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