2017-06-18 70 views
0

我有两个不同的行向量P和L.算法对于每次迭代都有不同的P和L,我的代码应该计算两个行向量在同一位置有多少对应的向量,例如,如果P和L是:如何计算Matlab中所有迭代for循环输出的总和?

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”的值我可以显示它,但如果我有100个迭代将不方便,我如何计算所有迭代的总和答案和将总和存储在一个变量中,如Atotal

+0

你怀疑是对的,它每次都被覆盖。看到https://ch.mathworks.com/matlabcentral/answers/76783-how-do-i-stoop-overwriting-the-variable-in-a-for-loop无论如何,这似乎是一个问题,你不首先需要一个循环。 P和L总是一样的长度吗? –

+0

@LeanderMoesinger是P和L总是相同的长度。 – user3052793

+0

@LeanderMoesinger我实际上遇到了类似的情况,但我仍然无法获得总和。变量值比较不断变化,这很好,但我想能够总结所有的答案,因为我不能手动完成。 – user3052793

回答

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) 

是否完全一样的东西显示到目前为止的代码。

+0

但我不能将P1,P2或L ..保存到一个矩阵或向量中,因为该算法会为每次迭代生成它们;我没有保存它们。但是,我尝试了这一点,仍然只能得到没有总和的答案。 – user3052793

+0

啊,我以前就已经拥有过它们了。我的不好,编辑 –

+0

如果你会发布更多的代码,这样做会有所帮助,所以我可以做出更好的示例 –