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

如何在R中实现矩阵每行随机抽取指定数量的列

R语言实现矩阵每行随机抽取指定数量列的方法

基础实现(易理解,适合中小规模矩阵)

我们先构造测试矩阵方便验证效果,你给出的示例矩阵可调整为带值的版本:

# 构造3行4列的测试矩阵,按行填充1~12
A <- matrix(1:12, nrow = 3, ncol = 4, byrow = TRUE)
print(A)
# 输出:
#      [,1] [,2] [,3] [,4]
# [1,]    1    2    3    4
# [2,]    5    6    7    8
# [3,]    9   10   11   12

使用apply逐行独立抽样,直接得到每行的抽样结果:

# 方式1:仅获取每行随机抽取的2列的索引
sample_col_idx <- t(apply(A, 1, function(row) sample(seq_along(row), size = 2)))
print(sample_col_idx)
# 运行结果示例(每次随机,结果不固定):
#      [,1] [,2]
# [1,]    2    4
# [2,]    1    3
# [3,]    3    1

如果需要直接得到抽取后的数值,可直接在函数内抽样元素:

# 方式2:直接获取每行抽取后的数值
sampled_data <- t(apply(A, 1, function(row) sample(row, size = 2)))
print(sampled_data)
# 对应上述索引的输出示例:
#      [,1] [,2]
# [1,]    2    4
# [2,]    5    7
# [3,]   11    9

高效实现(适合超大规模矩阵)

如果矩阵行数超过10万,apply的循环效率偏低,可以用向量化操作提速:

n_row <- nrow(A)
n_col <- ncol(A)
sample_size <- 2 # 每行抽取的列数,可按需调整

# 生成对应行列的索引
row_pos <- rep(seq_len(n_row), each = sample_size)
col_pos <- as.vector(replicate(n_row, sample(seq_len(n_col), sample_size)))

# 按索引提取元素并整合成矩阵
sampled_data <- matrix(A[cbind(row_pos, col_pos)], nrow = n_row, byrow = TRUE)

补充说明

如果需要固定随机结果方便复现,可在运行抽样代码前执行set.seed(自定义整数),比如set.seed(123),后续每次运行都会得到相同的抽样结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 01:18:03