循环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稍微好一点)。非常有用,谢谢!