在 Matlab 中查找唯一二进制排列的快速方法

Fast method to find unique binary permutations in Matlab

我正在寻找一种非常快速的方法来在 Matlab 中创建二进制数的唯一排列。

例如 - 在:[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 的 vchoosek mex 函数,可以在 matlab fileexchange 中找到。

希望对您有所帮助!