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

如何高效从长度100向量的20元排列中抽取50个样本?

高效抽取随机排列样本的方法

你遇到的问题核心是直接生成所有100选20的排列完全不现实——这个排列数是100!/(80!)≈1.3×10³⁹,无论是内存存储还是计算时间都不可能完成。正确的思路是跳过全量生成步骤,直接随机生成50个符合要求的排列。

以下是两种简单高效的实现方式:

方法1:基础R循环生成

利用sample()函数的无放回抽样特性(排列本质就是有序的无放回抽样),直接生成单个排列,再通过replicate()批量生成50个:

# 设置随机种子,保证结果可复现
set.seed(123)
# 生成50个长度为20的随机排列,结果默认按列存储,转置后每行对应一个排列
sample_perms <- t(replicate(50, sample(1:100, 20, replace = FALSE)))

方法2:tidyverse风格实现

如果你习惯用tidyverse工具链,可以用purrr包批量生成并整理成数据框:

library(purrr)
library(tibble)

set.seed(123)
sample_perms <- map_dfr(1:50, ~ as_tibble_row(sample(1:100, 20, replace = FALSE)))

关键说明

  • 这两种方法的时间和内存成本仅和样本量(50)、单排列长度(20)相关,完全可控,不会出现内存溢出或长时间等待的问题。
  • set.seed()是可选的,加上它可以让你的随机结果固定,方便后续复现分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:37:33