我想做以下事情:
我创建了一个包含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=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
但是不适用于其他列,所以我需要做同样的事情但是使用矩阵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)
(此处为空)。
有什么想法吗?非常感谢你提前
答案 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