生成 x 个随机变量的最快方法
Fastest Way to Generate x Number of Random Variables
index = [10 100 1000 10000 100000]
假设我想生成 10, 100,...,100000
(对应于上面的索引)参数为 1/10
的指数随机变量。我当然是用 for
循环和命令来做到这一点的,例如
x = exprnd(0.1,100,1)
也可以使用
从均匀随机变量生成指数随机变量
x = -10*log(u)
在这种方法中,我首先生成均匀随机变量,然后将向量 u
插入到前面的方程中。这种方法在计算时间方面更快。
我怎样才能加快这个过程?我可以用向量化来做到这一点吗,也就是说,没有 for 循环?
我会创建一个长度为 sum(index)
的长向量,然后将它分成我想要的不同大小。
这是最快的方法。
试试这个:
expFun = @(size)exprnd(0.1,size,1);
index = [10 20 30 40];
data = cellfun(expFun,mat2cell(index,ones(size(index,1),1),ones(1,size(index,2))),'UniformOutput',false);
index = [10 100 1000 10000 100000]
假设我想生成 10, 100,...,100000
(对应于上面的索引)参数为 1/10
的指数随机变量。我当然是用 for
循环和命令来做到这一点的,例如
x = exprnd(0.1,100,1)
也可以使用
从均匀随机变量生成指数随机变量x = -10*log(u)
在这种方法中,我首先生成均匀随机变量,然后将向量 u
插入到前面的方程中。这种方法在计算时间方面更快。
我怎样才能加快这个过程?我可以用向量化来做到这一点吗,也就是说,没有 for 循环?
我会创建一个长度为 sum(index)
的长向量,然后将它分成我想要的不同大小。
这是最快的方法。
试试这个:
expFun = @(size)exprnd(0.1,size,1);
index = [10 20 30 40];
data = cellfun(expFun,mat2cell(index,ones(size(index,1),1),ones(1,size(index,2))),'UniformOutput',false);