在 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 中找到。
希望对您有所帮助!
我正在寻找一种非常快速的方法来在 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 中找到。
希望对您有所帮助!