在MATLAB中提高一系列分布的NORMRND速度

时间:2014-10-31 12:26:39

标签: performance matlab vectorization

所以,我正在寻找一种方法来加速我的代码。我有一个正常分布的大向量(即平均值和标准差的向量),我需要从中生成随机数。我的代码的一般示例如下所示:

tic

N=1e6;
mu = rand(N,1);
sigma = rand(N,1);

temp = zeros(length(mu),1);

for i = 1:length(mu)
     temp(i) = normrnd(mu(i),sigma(i));
end

toc

此代码的当前形式的已用时间为:

Elapsed time is 12.281509 seconds.

我通常会尝试对大多数计算密集型命令进行矢量化,但是现在我很难知道如何让它运行得更快。每次运行代码时,我都必须多次执行此操作,因此我可以更快地完成此操作。

你们这些MATLAB天才有没有想过如何加快这一点?

谢谢!约翰

1 个答案:

答案 0 :(得分:2)

入侵normrnd.m以获取此自定义代码,该代码必须复制问题中描述的功能 -

N=1e6;
mu = rand(N,1);
sigma = rand(N,1);
temp = randn(size(sigma)).*sigma + mu;

在我的系统上,运行时从18.946094 seconds减少到0.037229 seconds

希望这对你有用!