Matlab nchoosek задача - PullRequest
       6

Matlab nchoosek задача

3 голосов
/ 25 февраля 2011

Мой вопрос связан с Matlab. Существует функция с именем nchoosek ([вектор], целое число). Используя эту функцию, я хотел бы получить все 2-элементные комбинации данного вектора. (то есть nchoosek ([1: 10000, 2])). Это очень медленно, как указано в документации к Matlab.

Вопрос: «Есть ли более быстрый способ выполнить ту же работу?».

Спасибо, что уделили мне время. Я очень ценю ваши усилия.

1 Ответ

3 голосов
/ 25 февраля 2011

Если вам нужны только 2-элементные комбинации, вы можете использовать NDGRID .Обратите внимание, что для всех двухэлементных комбинаций до N требуются значения N^2, поэтому, если Matlab начнет пейджинг, процесс будет медленным.

N = 100;
[xx,yy] = ndgrid(1:N,1:N);
allCombinations = [xx(:),yy(:)];

Обратите внимание, что функция NDGRID значительно отличается от nchoosek .Первый возвращает вектор из двух строк со всеми возможными N ^ 2 комбинациями, в то время как последний пропускает комбинации из двух одинаковых элементов, а также комбинации, в которых изменяется только порядок.Ведущий к (N ^ 2-N) / 2 элементам строки.

...