2013-04-15 3 views
0

Мне нужно сгенерировать все возможные комбинации 10X5 matrix. Мне нужны все 10X1 matrix, 10X2 matrix, 10X3 matrix и т. Д. Какой самый эффективный способ. я могу использовать несколько циклов, но это было бы неэффективно. например: У меня есть матрица:Создать 2^N-1 количество матриц из матрицы MXN

col1 col2 col3 col4 

Я хочу:

col1 and col2 and col3 and col4 

затем:

col1 col2 and col1 col3 and col1 col4

и так далее, чтобы вернуть все 2^5-1 комбинации колонны

+1

Сочетание столбцов, рядов или обоих? Короткий пример, скажем, 4 на 3, поможет. – Oleg

+0

Ваш вопрос критически не хватает информации. Вам просто нужна матрица с первым столбцом, одна с первой и второй и т. Д.? Или вы хотите иметь все возможные перестановки значений внутри строк? – Jonas

+0

@OlegKomarov Я редактировал вопрос. Прошу про ошибку, о которой шла речь ранее. – MaxSteel

ответ

3

Вы можете использовать nchoosek в цикле:

for k = 1:ceil(5/2) %only need to go half way up otherwise start repeating 
    index{k} = nchoosek(1:5, k); 
end 

, а затем использовать индекс, чтобы получить подматрицы, выбирая столбцы

+0

Спасибо большое. Опираясь на то, как все просто в Matlab :) Спасибо за удивительный ответ. – MaxSteel

2

Я не собираюсь решать его для вас, но вот некоторые полезные функции. Вы должны уточнить, что именно представляет собой ваш вклад.

>> nchoosek([1:4],3) 

ans = 

    1  2  3 
    1  2  4 
    1  3  4 
    2  3  4 

>> combntns([1:3],2) 

ans = 

    1  2 
    1  3 
    2  3 

>> perms([1:3]) 

ans = 

    3  2  1 
    3  1  2 
    2  3  1 
    2  1  3 
    1  2  3 
    1  3  2 
+0

Спасибо за ввод. Я могу использовать их в fututre. Большое спасибо. Первая функция выполняла работу – MaxSteel