2014-11-27 2 views
0

У меня есть эта матрица и вы хотите сделать все комбинации столбчатых квадратных матриц (8x8), составленных из этих данных.Петля через все комбинации из 8 в 15 MATLAB

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.

+1

Является ли порядок столбцов в матрице важным? – David

+0

Я предположил, что это не важно в моем ответе, потому что вы спрашивали о комбинациях, а не перестановках. – David

ответ

1

Я назвал вашу матрицу A.

p=nchoosek(1:15,8); 

дает все комбинации из 8 цифр, взятых от 1 до 15. Они представляют собой столбцы матрицы 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,:)); 
Смежные вопросы