用均值矩阵和标准差矩阵调用 rnorm
calling rnorm with a matrix of means and a matrix of standard deviations
我有两个 n*p 维矩阵,一个包含均值,一个包含 sds。
我想做类似 rnorm(1, means, sds) 的事情并得到一个新矩阵 n*p 以便每个单元格都来自 rnorm(1, means[i,j], sds[i,j] ).
如何在不循环的情况下执行此操作?
我查看了 apply 系列、sweep 和 outer 中的函数,但尽管解决方案可能是一个简单的单行代码,但我无法弄清楚。
means=matrix(1:12,ncol=4)
sds=round(matrix(runif(12,0.1,0.2),ncol=4),2)
函数rnorm()
可以根据需要在参数mean=
中取一个向量,在参数sd=
中取一个向量:
matrix(rnorm(length(means), mean=means, sd=sds), nrow(means))
如果您已经有了一个尺寸合适的矩阵 m
,那么您可以这样做:
m[] <- rnorm(length(means), mean=means, sd=sds)
(感谢@BenBolker 的评论)
我有两个 n*p 维矩阵,一个包含均值,一个包含 sds。
我想做类似 rnorm(1, means, sds) 的事情并得到一个新矩阵 n*p 以便每个单元格都来自 rnorm(1, means[i,j], sds[i,j] ).
如何在不循环的情况下执行此操作?
我查看了 apply 系列、sweep 和 outer 中的函数,但尽管解决方案可能是一个简单的单行代码,但我无法弄清楚。
means=matrix(1:12,ncol=4)
sds=round(matrix(runif(12,0.1,0.2),ncol=4),2)
函数rnorm()
可以根据需要在参数mean=
中取一个向量,在参数sd=
中取一个向量:
matrix(rnorm(length(means), mean=means, sd=sds), nrow(means))
如果您已经有了一个尺寸合适的矩阵 m
,那么您可以这样做:
m[] <- rnorm(length(means), mean=means, sd=sds)
(感谢@BenBolker 的评论)