如何无循环实现按矩阵元素调用rnorm生成同维度矩阵?
一行向量化解法搞定矩阵逐元素正态抽样
哈哈,这个问题其实很简单,根本不用折腾apply、sweep这些函数——利用R的向量化特性就能一行搞定!
核心思路是:rnorm()本身就支持向量形式的mean和sd参数,它会自动逐个对应生成随机数。我们只需要把矩阵拆成向量传入,最后再把结果还原成原来的矩阵维度就行。
完整示例代码
# 定义你给出的示例矩阵 means <- matrix(1:12, ncol = 4) sds <- round(matrix(runif(12, 0.1, 0.2), ncol = 4), 2) # 一行代码生成目标矩阵 result_matrix <- matrix(rnorm(length(means), mean = means, sd = sds), nrow = nrow(means)) # 查看结果 print(result_matrix)
为什么这能行?
length(means)会返回矩阵的总元素数,确保我们生成刚好对应数量的随机数- 当把矩阵传入
rnorm()的mean和sd参数时,R会自动将矩阵扁平化为向量,rnorm()会逐个取means[i,j]和sds[i,j]来生成对应的随机数 - 最后用
matrix(..., nrow = nrow(means))把生成的随机数向量还原成和原矩阵一样的行列结构
这个方法比循环或者apply族函数更高效,也更简洁,完全符合你要的一行代码需求~
内容的提问来源于stack exchange,提问作者Wave
相关产品推荐
相关产品推荐

