说我在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示例中一样。
答案 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))
否则。