生成列和为1的(0,1)随机矩阵函数:代码问题排查
问题分析与修正
你的代码核心问题出在生成随机列的那一行:columna_aleatoria <- runif(num_columnas, min = 0, max = 1)。这里你误将列数num_columnas作为生成随机数的数量,但每一列应该包含num_filas个元素(对应矩阵的行数)。参数用错后,R会自动循环填充长度不匹配的向量,最终导致行和为1而非列和为1。
修正后的代码
generar_matriz_columnas_suma_uno <- function(num_filas, num_columnas) { matriz <- matrix(0, nrow = num_filas, ncol = num_columnas) for (j in 1:num_columnas) { # 生成对应行数的随机向量(取值0到1) columna_aleatoria <- runif(num_filas, min = 0, max = 1) # 归一化处理,让列元素之和为1 suma_columna <- sum(columna_aleatoria) columna_normalizada <- columna_aleatoria / suma_columna # 将归一化后的列赋值给矩阵 matriz[, j] <- columna_normalizada } return(matriz) }
验证方法
生成矩阵后,用colSums()函数检查每一列的和是否为1:
# 测试:生成3行2列的矩阵 test_mat <- generar_matriz_columnas_suma_uno(3, 2) print(test_mat) # 查看列和 colSums(test_mat)
输出的colSums结果应全部为1,说明修正有效。
内容的提问来源于stack exchange,提问作者Ayoze Alfageme
相关产品推荐
相关产品推荐

