【问题标题】:How to calculate the sum of the output of the for loop for all iterations in Matlab?如何计算Matlab中所有迭代的for循环输出的总和?
【发布时间】:2017-06-18 15:13:47
【问题描述】:

我有两个不同的行向量 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这样的一个变量的总和?

【问题讨论】:

  • 你猜对了,它每次都会被覆盖。请参阅ch.mathworks.com/matlabcentral/answers/… 无论如何,这似乎是一个你不需要循环的问题。 P 和 L 总是相同的长度吗?
  • @LeanderMoesinger 是的,P 和 L 的长度始终相同。
  • @LeanderMoesinger 我实际上遇到了类似的事情,但我仍然无法得到总和。比较的变量值不断变化,这很好,但我希望能够总结所有答案,因为我不能手动完成。

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


【解决方案1】:

您必须从每个循环中存储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;移出循环,然后您甚至不必再取总和。

有点离题,但您可以将目前显示的所有代码替换为

a = sum(P==1 & L==1)

做同样的事情。

【讨论】:

  • 但我无法将 P1、P2 或 L.. 保存到一个矩阵或向量中,因为算法会为每次迭代生成它们;我没有保存它们。但是,我尝试了这个,但我仍然只得到没有总和的答案。
  • 啊,我以为你事先已经拥有它们了。我的坏,编辑
  • 如果您能发布更多代码会有所帮助,以便我制作更好的示例
  • 实际上该算法只是在完成一次迭代之前多次计算 P 和 L。所以我的代码中没有特定的变量。我正在使用的所有代码都是我展示的代码。所以现在我不确定该放什么来代替变量 q。
  • 等一下,直截了当:您显示的整个代码是在循环中吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 2013-08-16
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 2016-05-20
相关资源
最近更新 更多