Я хочу перечислить все возможные пары целых чисел [1, n]
с большим n
. Я нахожу, что ищу самый быстрый вариант. Это то, к чему я придумал.Самое быстрое решение для перечисления всех пар n целых чисел?
Методы Matlab's nchoosek
и combnk
рекомендуют n<15
для перечисления всех возможных комбинаций из-за взрывного количества комбинаций. Итак, как быстро это зависит от n.
pair = nchoosek(1:n, 2);
Другим вариантом было бы использовать вложенный цикл
kk =1;
pair = zeros(nchoosek(n, 2), 2);
for ii = 1:n
for jj = ii+1:n
pair(kk, :) = [ii, jj];
kk = kk + 1;
end
end
Это будет относительно медленным.
Я также подумал о использовании функции ind2sub
непосредственно
pair_adjacency = tril(ones(n), -1);
[x, y] = ind2sub(size(pair_adjacency), find(pair_adjacency==1));
pair = [x, y];
Timing эти методы в цикле, в 10 раз каждый с n=1000
, я быстро к самому медленному
- ind2sub (0,15 сек)
- для петли (16,3 сек)
- nchoosek (16,8 сек)
Кажется, что ind2sub
- это самый быстрый способ пройти длинный выстрел. Просто из любопытства, какие другие варианты могут быть или не быть быстрее?
Самый универсальный 'снова bsxfun'! –
Speedy! Я использую ту же настройку, что и раньше. – Cecilia
wow вы набираете быстрее, чем я думаю, ха-ха очень приятно! –