Matlab 如何用k个零元素顺序生成长度为n的所有二进制向量?

Matlab 如何用k个零元素顺序生成长度为n的所有二进制向量?,matlab,Matlab,如何用k个零元素顺序生成长度为n的所有二进制向量 我知道如何一次生成所有这些序列的组合。但我正在寻找一种算法来逐个构建它们 此代码使用a零元素生成长度为a+b的所有二进制向量,并将其存储在V中: function V = build_2(a,b) C = nchoosek(1:a+b,b); V = zeros(size(C,1),a+b); for i=1:size(V,1) V(i,C(i,:)) = 1; end 这个怎么样 for n = 0:2^(a+b)-1 aux

如何用k个零元素顺序生成长度为n的所有二进制向量

我知道如何一次生成所有这些序列的组合。但我正在寻找一种算法来逐个构建它们

此代码使用
a
零元素生成长度为
a+b
的所有二进制向量,并将其存储在
V
中:

function V = build_2(a,b)
C = nchoosek(1:a+b,b);
V = zeros(size(C,1),a+b);
for i=1:size(V,1)
    V(i,C(i,:)) = 1;
end
这个怎么样

for n = 0:2^(a+b)-1
    aux = dec2bin(n,a+b)-'0'; %// or use: aux = de2bi(n,a+b);
    if sum(aux)~=b
        continue
    end
    v = aux; %// desired result
    disp(v) %// do stuff with this v
end

这将生成长度为
a+b
的所有二进制向量,并跳过那些没有确切长度为
b
的二进制向量。用于生成每个二进制向量。由于
bin2dec
给出一个字符串,因此减去
'0'
将转换为一个数值向量。

@LuisMendo谢谢。我编辑了这个问题以显示我所做的,我假设您需要一个接一个地生成它们,因为所有这些都同时占用了太多的内存,对吗?否则,您可以全部生成它们,然后编制索引rows@LuisMendo是的,这就是问题所在。谢谢。做
dec2bin(n,a+b)-(0)不是很耗时吗并检查总和(aux)~=b时的
?因为时间在我的代码中非常重要。@MahdiKhosravi是的,最好直接生成每个需要的向量,而不是生成每个可能的向量,然后跳过不需要的向量。至于
dec2bin
:如果您有合适的工具箱,请使用
aux=de2bi(n,a+b)取而代之;也许会faster@MahdiKhosravi是的,对不起。更正!