如何计算Matlab中所有迭代for循环输出的总和?
我有两个不同的行向量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
?
您必须从每个循环存储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)
是否完全一样的东西显示到目前为止的代码。
但我不能将P1,P2或L ..保存到一个矩阵或向量中,因为该算法会为每次迭代生成它们;我没有保存它们。但是,我尝试了这一点,仍然只能得到没有总和的答案。 – user3052793
啊,我以前就已经拥有过它们了。我的不好,编辑 –
如果你会发布更多的代码,这样做会有所帮助,所以我可以做出更好的示例 –
你怀疑是对的,它每次都被覆盖。看到https://ch.mathworks.com/matlabcentral/answers/76783-how-do-i-stoop-overwriting-the-variable-in-a-for-loop无论如何,这似乎是一个问题,你不首先需要一个循环。 P和L总是一样的长度吗? –
@LeanderMoesinger是P和L总是相同的长度。 – user3052793
@LeanderMoesinger我实际上遇到了类似的情况,但我仍然无法获得总和。变量值比较不断变化,这很好,但我想能够总结所有的答案,因为我不能手动完成。 – user3052793