在MATLAB for循环中获取迭代次数

时间:2014-03-09 20:31:01

标签: matlab

说我在MATLAB中有一个for循环:

scales = 5:5:95;
for scale = scales
    do stuff
end

如何尽可能简洁地在MATLAB for循环中获取迭代次数?

在Python中我会使用:

for idx, item in enumerate(scales):

其中idx是迭代次数。

我知道在MATLAB中(和任何其他语言一样)我可以创建一个计数变量:

scales = 5:5:95;
scale_count = 0;
for scale = scales
    scale_count = scale_count + 1;
    do stuff
end

否则我可以使用find

scales = 5:5:95;
for scale = scales
    scale_count = find(scales == scale);
    do stuff
end

但我很想知道是否有更简洁的方法来做到这一点,例如:就像在Python示例中一样。

3 个答案:

答案 0 :(得分:4)

也许您可以使用以下内容:

scales = 5:5:95;
for iter = 1:length(scales)
    scale=scales(iter); % "iter" is the iteration number.
    do stuff
end

答案 1 :(得分:2)

由于for遍历任何你给它的列,另一种近似多个循环变量的方法是使用一个适当构造的矩阵:

for scale=[5:5:95; 1:19]
    % do stuff with scale(1) or scale(2) as appropriate
end

(我个人的偏好是按照Parag的回答循环索引,只是在循环中直接引用data(index),没有中间名.Matlab的语法在最好的时候不是很简洁 - 你只是习惯了)

答案 2 :(得分:1)

MATLAB的方式可能是用向量做的。

例如,假设您想要在向量中找到一个等于其位置的值。你通常会这样做:

a = [10 20 1 3 5];
found = 0;
for index = 1:length(a)
    if a(index) == index
        found = 1;
        break;
    end
end

相反,你可以这样做:

found = any(a == 1:length(a));

一般

for i=1:length(a)
    dostuff(a(i), i);
end

可以替换为:

dostuff(a(i), 1:length(a))

它可以被矢量化或

arrayfun(@dostuff, a, 1:length(a))

否则。