R语言构造满足行列约束的100*4 0-1矩阵的实现方法
R语言生成符合约束的0-1矩阵实现方案
你的需求本质等价于生成一个长度为100、取值为1-4的整数向量,要求每个取值出现次数≥2,再将该向量转换为独热矩阵即可同时满足两个约束,不需要复杂的参数配置,两种常用实现方式如下:
Base R无依赖实现
无需加载任何第三方包,直接生成稠密矩阵:
# 生成满足每列至少2个1的列索引 # 先为每列分配最低2个计数 min_col_assign <- rep(1:4, each = 2) # 剩余92个位置随机分配列 rest_col_assign <- sample(1:4, size = 92, replace = TRUE) # 打乱索引顺序保证随机性 col_index <- sample(c(min_col_assign, rest_col_assign)) # 构造0-1矩阵 MyMat <- matrix(0, nrow = 100, ncol = 4) # 按行列索引赋值为1 MyMat[cbind(1:100, col_index)] <- 1
基于rsparsematrix的实现
适配你之前的代码写法,适合需要稀疏矩阵的场景:
library(Matrix) # 沿用上面生成的col_index构造稀疏矩阵 MyMat_sparse <- rsparsematrix( nrow = 100, ncol = 4, i = 1:100, j = col_index, x = rep(1, 100) ) # 如需转为稠密矩阵再执行as.matrix MyMat <- as.matrix(MyMat_sparse)
约束验证
可以通过以下代码验证生成的矩阵是否符合要求:
# 验证每行仅有1个1 all(rowSums(MyMat) == 1) # 验证每列至少有2个1 all(colSums(MyMat) >= 2)
内容的提问来源于stack exchange,提问作者Mathica
相关产品推荐
相关产品推荐

