【问题标题】:MATLAB Cycle through vector values sequentially in a large for LoopMATLAB 在大型 for 循环中按顺序循环遍历向量值
【发布时间】:2014-06-09 21:32:02
【问题描述】:

我有一个小向量,它的值需要在执行大 for 循环时按顺序计算。每次 for 循环执行时,它会依次从向量索引 1 移动到 end 然后重置,直到 for 循环完全执行。

例如,如果向量为[4 2 1],for循环执行n次,则索引值为4,2,1,4,2,1,4,2 ,1...等。

我想知道是否有一种方法可以优化或缩小我开发的某些代码,或者是否有另一种方法来完成任务,无论是否更简单。

这是我的代码:

cookie_jar = [prt/4 prt/2 prt];
...
for k = 1:reps;


    if k <= length(cookie_jar);
        cookie = cookie_jar(k);
    elseif rem(k,length(cookie_jar)) == 0
        cookie = cookie_jar(end);
    else 
        cookie = cookie_jar(rem(k,length(cookie_jar))); 
    end

end

谢谢!

【问题讨论】:

  • 如果您对这个问题投了反对票,请说明原因,以便提问者知道以后要避免问什么类型的问题。更好的反馈可以为您带来更好的问题。
  • 我没有投反对票,但您的描述过于复杂并且包含许多不相关的细节。考虑这个问题:“我有一个小向量,它的值需要在执行大 for 循环时按顺序计算。每次执行 for 循环时,它将按顺序从向量索引 1 移动到结束,然后重置直到 for循环完全执行。对于输入向量[1,3,7],循环应使用值 1,3,7,1,3,7..."。这将是一个更简短的问题,其中包含所有相关信息。
  • 优秀的点和很棒的评论。我实施了您建议的更改。感谢您的建设性批评!

标签: matlab for-loop vector


【解决方案1】:

您必须修复第三种情况以匹配以 1 开头的索引,然后不再需要前两种情况:

for k = 1:reps
   cookie=cookie_jar(rem(k-1,length(cookie_jar))+1)
   %...
end

【讨论】:

  • 这在我看来确实是一种优化。还有其他方法可以做到吗?好奇心是现在的主要影响力。
  • @endowdly:你可以向量化这个操作,但只要循环的其余部分没有向量化,就没有优势:allcookies=cookie_jar(rem([1:reps]-1,length(cookie_jar))+1)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多