【问题标题】:Applying the same function across columns in MATLAB在 MATLAB 中跨列应用相同的函数
【发布时间】:2013-09-30 22:43:34
【问题描述】:

我正在应用伯努利随机变量的 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 个不同实验的原因?

【问题讨论】:

    标签: matlab


    【解决方案1】:

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

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

    在多重实验的情况下,使用这个:

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

    【讨论】:

      【解决方案2】:

      想出了答案,我只是想多了,如果有人感兴趣,以下是我正在寻找的:

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

      【讨论】:

        猜你喜欢
        • 2016-11-06
        • 2021-07-13
        • 1970-01-01
        • 1970-01-01
        • 2021-06-15
        • 2019-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多