在 C ++ / C 中,我们在一个循环中有多个循环变量,如for(int i=0; int j=0; i<5; j<5; i++; j++)
Matlab 中有多个变量循环的设施吗?
而且,我在循环迭代计算中非常有意识,因此它会影响速度,因为我已经在 Matlab 中已经是嵌套循环了。
答案 0 :(得分:8)
MATLAB 排序支持多个循环变量,因为它支持矩阵作为循环表达式。这是如何运作的? 矩阵的各个列在每次迭代开始时分配给循环变量。
示例代码:
V = [1:1:5; 2:2:10]
for iv = V,
fprintf('iv = [%d %d];\n',iv);
end
输出:
V =
1 2 3 4 5
2 4 6 8 10
iv = [1 2];
iv = [2 4];
iv = [3 6];
iv = [4 8];
iv = [5 10];
我们在这里实现了两个循环变量iv(1)
和iv(2)
,它们由用作循环表达式的矩阵行指定。请注意,数组可以是任何类型(例如字符串,单元格,结构等)。
<强>摘要强>
预先定义循环变量的每次迭代,并将它们存储为矩阵的行。 在循环内部,循环变量将包含矩阵的列。
旁注
我猜这个约定是colon
operator通过水平连接而不是垂直生成数组这一事实的结果。请考虑以下情况会发生什么:
for ii = (1:3).', numel(ii), end
您可能期望三次迭代,每次迭代都指示numel(ii)=1
,但您只能获得一次迭代并且循环报告:
ans =
3
如果您期望ii
成为标量,则问题很明显。
<强>术语强>
for loop_variable = loop_expression, statement, ..., statement end
答案 1 :(得分:2)
MATLAB不具备执行多个循环变量的能力,您必须使用嵌套的for循环。也就是说,MATLAB最大的优势之一是在数组中有效地应用函数。
例如:
a = zeros(1,5);
for i=1:5
a(i) = sin(i);
end
b = sin(1:5);
在上面的例子中,a&amp; b将是相同的,但计算b不需要显式的for循环。有时需要显式的for循环(包括嵌套循环)(比如通过sim命令运行模拟),但由于你担心计算循环迭代的时间,我猜你没有运行时间 - 像大规模模拟这样的密集型任务。
因此,我不是使用嵌套的for循环,而是设置函数来处理数组并输入“循环变量”作为数组。查看命令meshgrid&amp; griddata帮助创建这些数组。
答案 2 :(得分:0)
正如chappjc所指出的,正如MathWorks在文档中指出的那样,for
循环的每次迭代都占用迭代器的下一列。因此,例如,要遍历列向量,必须一次转置它(即for ii = [1; 1; 2; 3; 5]'
),否则ii
等于列向量。
仅是为了扩展chappjc的出色答案,您还可以利用单元格的这种行为,此外,除了需要数字迭代器之外,您还可以使用一些大小不同的字符串,然后可以将它们处理为变量,因此您可以不必做太多索引。这是一个简单的例子:
figure(1)
imageList = {};
for ii = [{somePath; someDirListing; 1}, {anotherPath; anotherDirListing; 2}] % Each iteration takes one column
[pathname, images, iPos] = deal(ii{:});
for iImage = images
img = imread(fullfile(pathname, iImage));
imagesc(img)
axis image
if iPos == 1
title(['This is a left image, titled ' iImage])
else
title(['This is a right image, titled ' iImage])
end
pause(1)
end
end