如何用R语言为600×20矩阵每行设1个1且每列至少含1个1?
实现方法
要构造满足要求的矩阵,核心思路是先保证每列至少有一个1,再给剩余行随机分配列索引,具体步骤如下:
步骤1:初始化全0矩阵
先创建指定尺寸的全0矩阵:
Chickens <- matrix(0, 600, 20)
步骤2:生成符合要求的列索引向量
我们需要一个长度为600的列索引向量,其中1到20每个数字至少出现一次:
- 先生成基础列索引,确保每列占一个位置:
base_cols <- 1:20 - 对剩余的580个位置,随机从20列中重复抽样:
rand_cols <- sample(1:20, 580, replace = TRUE) - 合并并打乱顺序,避免前20行固定对应1-20列,保证行的分配随机性:
all_cols <- c(base_cols, rand_cols) all_cols <- sample(all_cols)
步骤3:为矩阵填充1
利用行列索引对,把对应位置设为1:
Chickens[cbind(1:600, all_cols)] <- 1
验证结果
可以用以下代码验证是否符合要求:
- 检查每行1的数量:
rowSums(Chickens)结果应全为1 - 检查每列1的数量:
colSums(Chickens)结果应都≥1 - 检查总1的数量:
sum(Chickens)结果应为600
内容的提问来源于stack exchange,提问作者Katy Baker
相关产品推荐
相关产品推荐

