我想列出所有可能的整数[1, n]
对n
。我发现自己在寻找最快的选择。这就是我到目前为止所提出的。
由于爆炸性的组合数量,Matlab的nchoosek
和combnk
方法建议n<15
列出所有可能的组合。所以这有多快取决于n。
pair = nchoosek(1:n, 2);
另一个选择是使用嵌套for循环
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];
将这些方法定时循环,每次使用n=1000
10次,我最快到最慢
似乎ind2sub
是远射的最快方式。出于好奇,有什么其他选择可能会更快或更快?
答案 0 :(得分:4)
替换nchoosek(1:N,2)
使用bsxfun
-
[Y,X] = find(bsxfun(@gt,[1:N]',[1:N]))
pair = [X, Y];
仅限tril
和find
(不含ind2sub
) -
[y,x] = find(tril(true(N),-1))
pair = [X, Y];