循环遍历15 in MATLAB中的所有组合

时间:2014-11-27 00:39:29

标签: matlab loops for-loop matrix

我有这个矩阵,并且希望使用这个数据组成的列组成方阵(8x8)的所有组合。

  4  2  4   3   2   3   3   2   8   4   9   7   6   6   6
  2  0  4   1   0   3   0   8   5   0   9   3   7   7   1
  2  1  2   1   1   3   1   4   5   2   4   2   6   6   3
  0  0  2   2   1   2   3   9   1   1   4   4   4   4   6
  4  0  1   0   4   2   3   1   8   1   3   0   5   5   7
  3  1  4   0   0   1   0   2   6   2   9   1   2   2   0
  1  2  1   4   0   3   4   1   3   4   3   9   7   7   9
  2  0  0   4   0   0   3   1   5   0   1   9   1   1   7

即使在重播Matlab Loop of all combinations之后 我不确定如何进行所有矩阵组合,并在itteration中获得的组合名称中包含for循环中的计数器。

1 个答案:

答案 0 :(得分:1)

我调用了你的矩阵A

p=nchoosek(1:15,8);

给出了从1到15的8个数字的所有组合。这些代表了你想要的矩阵A的列。

现在有3种方法可以继续。首先,使用for循环:

M=zeros(8,8,size(p,1));
for i=1:size(p,1)
    M(:,:,i)=A(:,p(i,:));
end

将每个8x8矩阵放入一个更大的3D数组中。例如,您可以通过M(:,:,54)获取单个矩阵。

您还可以创建一个单元格数组:

N=arrayfun(@(k) A(:,p(k,:)),1:size(p,1),'UniformOutput',false);

并通过N{54}获取单个矩阵。

最后,您无法预先计算每个矩阵,只需在需要时拉出相应的列。如果不重用矩阵,这可能是最有效的方法:

O=A(:,p(54,:));