矢量化循环涉及矩阵值更新在MATLAB中



for循环如下:

N = 2;T = 3;
Trials = rand(N,T);
for i=1:N
    for j=1:T
        AverageValue = mean2(Trials);
        Trials(i,j) = Trials(i,j) - AverageValue;
    end
end   

困难在于AverageValue的值会随着Trials的每一次更新而改变。

===========================================

更新版本,'mean2'被'trapz'取代:

N=4;T=5;
Trials=rand(N,T);
for i=1:N
    for j=1:T
        IntValue=trapz(trapz(Trials(1:3,2:5)));
        Trials(i,j)=Trials(i,j)+IntValue;
    end
end

请帮忙,谢谢!

下面的代码将产生与post中的示例相同的输出:

 n = numel(Trials);
 Trials = Trials - mean2(Trials)*reshape(((n-1)/n).^(0:n-1), T, N)';

说明:通过观察递归减去平均值所产生的模式,您可以得到每个当前平均值m的关系如下:

 m(k) = m(k-1) - m(k-1)/n = ((n-1)/n)*m(k-1); % symbolic

因此你可以直接用嵌入递归从原始矩阵中减去一个矩阵,即

[m(1) m(2) m(3);
 m(4) m(5) m(6)];

,其中每个m根据规则m(k)= (((n-1)/n)^(k-1)*)m(1);使用先前值的累积进行解析替换,其中m(1)是原始矩阵的平均值。

最新更新