索引循环matlab

时间:2016-02-19 13:16:34

标签: matlab loops indexing

我想做以下事情:

我创建了一个包含1:n所有可能排列的矩阵,例如

n=4;
L=perms(1:n)';

我按预期输出 4 -by- 24 矩阵:

L =

  Columns 1 through 13

     4     4     4     4     4     4     3     3     3     3     3     3     
     3     3     2     2     1     1     4     4     2     2     1     1     
     2     1     3     1     2     3     2     1     4     1     2     4     
     1     2     1     3     3     2     1     2     1     4     4     2     

  Columns 14 through 24

     2     2     2     2     2     1     1     1     1     1     1
     3     4     4     1     1     3     3     2     2     4     4
     1     3     1     4     3     2     4     3     4     2     3
     4     1     3     3     4     4     2     4     3     3     2

现在我想将此矩阵用于for循环的索引:

使用第一列,我想为循环的输入提供以下索引:i=4 j=321。然后是i=3 j=21。然后是i=2 j=1i=1为空

这可以仅针对第一列进行,如下所示:

for u=4:-1:1
    for v=u-1:-1:1

但是不适用于其他列,所以我需要做同样的事情但是使用矩阵L的条目,类似于({它不能在MATLB中工作)列i=1

u=L(1:4,1)
v=L(u:L(4,1) , 1) %// where u corresponds to L(1,1) then L(2,1) then L(3,1)

(对于所有列,它们看起来像:

for i=1:length(L)
    for u=L(4*(i-1)+1:4*i)
        for v=.. ?

这不起作用,因为MATLAB获取条目的值,当我写L(1,1):L(4,1)时,它并不意味着将条目从第一行返回到第四行,而是所有数字都有增量从1的值到L(1,1)的值L(4,1)(此处为空)。

有什么想法吗?非常感谢你提前

2 个答案:

答案 0 :(得分:3)

我相信这样的事情会解决你的问题。

for col = 1:size(L,2)
    rowIdx = 1;
    for j = [L(:,col)]'
        for k = [L(rowIdx:end,col)]'
        % Do your stuff here 

        end
        rowIdx = rowIdx + 1;
    end
end

注意我如何直接使用L中列的值作为循环索引变量。在for循环语句中,您基本上可以编写任何行向量,索引将获取这些值。例如

for i = [1, 7, 11, 14, 23]
    disp(i); % prints 1,7,11,14,23
end

对于对象数组,单元格数组,基本上任何单行矩阵都是如此。

答案 1 :(得分:1)

你可以这样做:

for col = 1:size(L, 2)
    for I = 1:n-1
        for J = I:n
            i = L(I,col);
            j = L(J,col);
            %// As an example just print out the loop variable values
            disp(sprintf('Col:%d\ti:%d\tj:%d\r\n',col,i,j))
        end
    end
end