我正在寻找一种非常快速的方法来创建二进制数在Matlab中的唯一排列。
例如-In:[0 0 1]
退出:[1 0 0;0 1 0;0 0 1]
这就是我现在用的:

M = [zeros(1,L),ones(1,up)];
n = numel(M);
k = sum(M);
c = nchoosek(1:n,k);
m = size(c,1);

binary = zeros(m,n);
binary(sub2ind([m,n],(1:m)'*ones(1,up),c)) = 1;

这段代码运行良好,并提供了我所期望的输出,但是对于L=16和更大的up值,它的运行速度非常慢。
有什么提示我可以试着提高L值更大时的性能吗?
提前谢谢你!

最佳答案

我用来列出所有可能无序且无重复排列的最快、最通用的函数是jan simon的vchoosekmex函数,可以在matlab文件交换中找到。
我希望这有帮助!

关于algorithm - 在Matlab中查找唯一二进制排列的快速方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46142505/

10-12 19:27