2013-02-25 5 views
1

Я пытаюсь сгенерировать все комбинации из 2 элементов в заданном диапазоне чисел. Я использую функцию «combnk» следующим образом.Странное поведение функции combnk MATLAB

combnk (1: 4,2)

ANS =

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

combnk (1: 6,2)

ANS =

1  2 
1  3 
1  4 
1  5 
1  6 
2  3 
2  4 
2  5 
2  6 
3  4 
3  5 
3  6 
4  5 
4  6 
5  6 

Порядок комбинаций возвращаемые по-видимому, изменится. Мне нужно заранее знать порядок, чтобы моя программа работала правильно.

Есть ли какое-либо решение, чтобы убедиться, что я получаю комбинации в последовательном порядке? Кроме того, почему MATLAB показывает это странное поведение?

Единственное решение, о котором я могу думать, - это сначала проверить 1-ю запись матрицы результатов и перевернуть ее вниз, используя функцию «flipud».

Обновление: немного экспериментируя, я заметил, что обратный порядок возникает только тогда, когда длина набора чисел меньше 6. Вот почему combnk (1: 6,2) производит «правильный» порядок , Где в виде гребня (1: 5,2) результаты возвращаются назад. Это все еще большая проблема.

+1

Это похоже на ошибку. Вы должны хотя бы сообщить об этом в MathWorks, чтобы узнать, согласятся ли они. –

ответ

1

Это позволит решить проблему заказа:

a=combnk(1:4,2); 
[~,idx]=sortrows(a); 
aNew=a(idx,:); 

Я не знаю, почему MATLAB показывает это поведение.

+1

Спасибо, много за ответ. Ваше решение является хорошим решением. – rana

2

Вы можете попробовать nchoosek вместо combnk. У меня нет панели инструментов статистики Matlab (только октава), поэтому я не знаю, имеет ли значение nchoosek существенные недостатки.

+0

Ницца. Этот метод обеспечивает согласованные результаты. – rana

Смежные вопросы