多循环变量Matlab

时间:2014-04-25 17:39:47

标签: matlab variables loops for-loop

C ++ / C 中,我们在一个循环中有多个循环变量,如for(int i=0; int j=0; i<5; j<5; i++; j++) Matlab 中有多个变量循环的设施吗? 而且,我在循环迭代计算中非常有意识,因此它会影响速度,因为我已经在 Matlab 中已经是嵌套循环了。

3 个答案:

答案 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