You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia中如何按分组生成无放回随机整数并优化多分组冗余代码

实现方案

最简实现(和你原有写法逻辑完全一致,适配大m值场景)

默认n可以被m整除的场景下,用列表推导+批量拼接即可自动完成所有分组的采样和合并,不需要手动定义每个分组变量,m取任意大值都可直接运行:

using Distributions

n = 10000
m = 100  # 可替换为任意符合条件的分组数
k = n ÷ m  # 自动计算每个分组的元素数量

# 自动生成所有分组采样结果后拼接为最终数组
order = vcat([sample((i-1)*k + 1 : i*k, k, replace=false) for i in 1:m]...)

无额外依赖的标准库实现

如果不想引入第三方包,对全区间做无放回全量采样等价于打乱区间顺序,可以直接用Julia标准库Random的shuffle方法实现,逻辑和性能完全一致:

using Random

n = 10000
m = 100
k = n ÷ m

order = vcat([shuffle((i-1)*k + 1 : i*k) for i in 1:m]...)

兼容n不能被m整除的鲁棒版本

如果存在n无法被m整除的场景,可以用下面的通用函数自动处理最后一个分组的长度:

using Random # 若要沿用Distributions的sample写法,替换这行引入即可

function group_shuffle(n::Int, m::Int)
    res = sizehint!(Int[], n)
    prev = 0
    for i in 1:m
        curr_end = i == m ? n : prev + n ÷ m
        # 如果用Distributions包,把shuffle替换为sample(prev+1:curr_end, curr_end-prev, replace=false)即可
        append!(res, shuffle(prev+1:curr_end))
        prev = curr_end
    end
    return res
end

# 调用示例
order = group_shuffle(10000, 100)

内容的提问来源于stack exchange,提问作者Mizzle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:15:08