Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环matlab的索引_Matlab_Loops_Indexing - Fatal编程技术网

循环matlab的索引

循环matlab的索引,matlab,loops,indexing,Matlab,Loops,Indexing,我想做以下工作: 例如,我创建了一个包含1:n中所有可能排列的矩阵 n=4; L=perms(1:n)'; for i = [1, 7, 11, 14, 23] disp(i); % prints 1,7,11,14,23 end 我得到了预期的4×24矩阵输出: 现在,我想将此矩阵用于for循环的索引: 使用第一列,我希望为循环的输入提供以下索引:I=4j=3,2,1。然后对于i=3j=2,1。然后对于i=2j=1i=1为空 只需对第一列执行此操作,如下所示: for u=4:-1

我想做以下工作:

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

n=4;
L=perms(1:n)';
for i = [1, 7, 11, 14, 23]
    disp(i); % prints 1,7,11,14,23
end
我得到了预期的4×24矩阵输出:

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

使用第一列,我希望为循环的输入提供以下索引:
I=4
j=3
2
1
。然后对于
i=3
j=2
1
。然后对于
i=2
j=1
<代码>i=1为空

只需对第一列执行此操作,如下所示:

for u=4:-1:1
    for v=u-1:-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
但是对其他列不起作用,所以我需要做同样的操作,但是对矩阵
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行返回条目到第4行,而是从
L(1,1)
的值到
L(4,1)
的值(此处为空)


有什么想法吗?事先非常感谢

您可以这样做:

for u=4:-1:1
    for v=u-1:-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

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

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
循环语句中,您基本上可以编写任何行向量,而索引将采用这些值。比如说

n=4;
L=perms(1:n)';
for i = [1, 7, 11, 14, 23]
    disp(i); % prints 1,7,11,14,23
end

这适用于对象数组、单元数组,基本上适用于任何单行矩阵。

如果数组上的循环需要行向量,请尝试在
L(1:4,1)上循环。
(注意转置)。@AndrasDeak是的,谢谢you@AndrasDeak不,应该先测试一下。现在工作。。。(顺便说一句,除了列向量问题之外,还有很多问题)谢谢你的作品完美!!我通过对“k=[L(rowIdx+:end,col)]”而不是k=[L(rowIdx:end,col)]”(n=4时,每次迭代我得到6个矩阵x24,这比10个矩阵x24稍微好一点)。非常有用,谢谢!