如何计算Matlab中所有迭代的for循环输出的总和?

时间:2017-06-18 15:13:48

标签: matlab for-loop machine-learning comparison evaluation

我有两个不同的行向量P和L.算法每次迭代都有不同的P和L,我的代码应该计算两个行向量在同一个地方有多少对应的例如,如果P和L是:

P=[1,2,2,1,1]
L=[2,2,1,1,1]

答案应该是2.如果我有另一个P和L,例如答案3,我应该能够将2和3加起来给我5。

我的代码计算每次迭代的正确答案,但我不知道如何将这些答案相加以得到矢量P和L在所有迭代中具有的相应数量的总数。

这是我的代码:

     i = 1:numel(P); 
     j = 1:numel(L);
     Valuecompared=(P(i) == 1) & (L(j)==1);

     a=0;

   for k = 1:numel(Valuecompared)

   if Valuecompared(k) == 1
    a=a+1;
   end

   end

我在循环内部和外部使用索引sum(a), cumsum(a)尝试了k但没有,但它只是给了我相同的答案" a"没有添加先前计算的" a"的答案。可能是因为它被覆盖而且每次都没有得到保存吗?

另外,我似乎无法存储" a"当算法运行时我可以显示它,但如果我有100次迭代不方便,我如何计算所有迭代的求和并将总和存储在一个变量中,如Atotal

1 个答案:

答案 0 :(得分:0)

您必须存储每个循环中的a。不幸的是,您没有显示完整的循环,因此我不知道您正在迭代哪个变量。但是我们假设它是q。然后你必须在循环外定义a,例如与

a = zeros(1,niter); % niter = number of times you run the loop

然后你必须用

之类的东西替换最后一行
if Valuecompared(k) == 1
    a(q)=a(q)+1;
end

循环完成后,您可以使用sum(a)

或者你可以将a=0;移到循环之外,然后你甚至不必再拿这笔钱了。

有点offtopic,但你可以用

替换到目前为止显示的所有代码
a = sum(P==1 & L==1)

完全一样。