R语言如何按指定概率继承规则实现矩阵扩展?
实现代码及说明
以下是可直接运行的完整实现脚本,你可以按需调整参数p的取值:
# 定义原矩阵 Mt <- matrix(c(0,1,1,0,1,0), nrow = 2, ncol = 3) # 定义概率参数p,可根据需求修改 p <- 0.5 # 1. 从原矩阵中随机抽取1行作为生成新行的基准行 sample_row_idx <- sample(nrow(Mt), 1) base_row <- Mt[sample_row_idx, ] # 2. 初始化2行新矩阵,默认值为0(天然符合原行0位置继承为0的规则) new_rows <- matrix(0, nrow = 2, ncol = ncol(Mt)) # 3. 逐列处理基准行取值为1的位置,按概率生成新行对应值 for (col in 1:ncol(Mt)) { if (base_row[col] == 1) { rand <- runif(1) if (rand < p) { # 概率p:生成1 1 new_rows[, col] <- c(1, 1) } else if (rand < p + (1-p)/2) { # 概率(1-p)/2:生成1 0 new_rows[, col] <- c(1, 0) } else { # 概率(1-p)/2:生成0 1 new_rows[, col] <- c(0, 1) } } } # 4. 拼接原矩阵和新行得到最终结果 Mt_final <- rbind(Mt, new_rows) # 输出结果 print("原矩阵:") print(Mt) print(paste0("随机选中的基准行是第", sample_row_idx, "行")) print("最终4行3列矩阵:") print(Mt_final)
补充说明
如果你需要搜索相关功能自主学习,可以参考这几个R基础函数的用法:
- 随机抽取元素/行:
sample() - 生成均匀分布随机数做概率判断:
runif() - 矩阵按行拼接:
rbind()
内容的提问来源于stack exchange,提问作者MD_Yang
相关产品推荐
相关产品推荐

