在MATLAB中的列之间应用相同的功能

时间:2013-09-30 14:04:43

标签: matlab

我正在应用伯努利随机变量的ML估计。我最初有以下代码:

muBern = 0.75;
bernoulliSamples = rand(1, N); 
bernoulliSamples(bernoulliSamples < muBern) = 1;
bernoulliSamples(bernoulliSamples > muBern & bernoulliSamples ~= 1) = 0;
bernoulliSamples; % 1xN matrix of Bernoulli measurements, 1's and 0's

estimateML = zeros(1,N);
for n = 1:N
    estimateML(n) = (1/n)*sum(bernoulliSamples(1:n)); % The ML estimate for muBern
end

这非常有效,但每次运行代码只是获取N=100观察结果的一种可能结果。我想重复此实验I=100次,并取所有结果的平均值,以获得准确代表实验的解决方案。

muBern = 0.75;
bernoulliSamples = rand(I, N); 
bernoulliSamples(bernoulliSamples < muBern) = 1;
bernoulliSamples(bernoulliSamples > muBern & bernoulliSamples ~= 1) = 0;
bernoulliSamples; % IxN matrix of Bernoulli measurements, 1's and 0's

estimateML = zeros(I,N);
for n = 1:N
    estimateML(n,:) = (1/n)*sum(bernoulliSamples(1:n,2)); % The ML estimate for muBern
end

我想知道这个for循环是否按照我的意愿行事:每行代表一个完全不同的实验。第二个代码实例是否与第一个代码实例完全相同,只有100个不同的结果作为100个不同实验的原因?

2 个答案:

答案 0 :(得分:5)

您不需要任何循环。在单实验案例中,用这个替换循环,它做同样的事情:

estimateML = cumsum(bernoulliSamples) ./ (1:N);

在多实验案例中,请使用:

estimateML = bsxfun(@rdivide, cumsum(bernoulliSamples,2), 1:N);

答案 1 :(得分:1)

得到了答案,我只是在思考它,如果有人对此感兴趣,以下是我所寻找的:

for n = 1:N
    estimateML(:,n) = (1/n)*sum(bernoulliSamples(:,1:n),2); % The ML estimate for muBern
end