我正在寻找一种非常快速的方法来创建二进制数在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/