如何在Matlab中生成一个有5行和一些特定列数的矩阵,这些元素可能只是二进制数,且列总和必须小于或等于3?
答案 0 :(得分:1)
这个怎么样:你可以用5比特表示的最大二进制数是2 ^ 5-1 = 31并跳过它们来找到数字总和<= 3的那些。 像
这样的东西n = 1:1:31;
for ii = 1:length(ii)
bin = dec2bin(ii)
digitSum = 0
for d = 1:length(bin)
digitSum = digitSum + str2num(bin(d))
end
if (digitSum <= 3)
%store results
end
end
答案 1 :(得分:1)
一些没有循环的可能性:
使用字符串:
D = 5;
S = 3;
numbers = str2mat(dec2bin(0:2^D-1))-'0';
numbers = numbers(sum(numbers,2)<=S,:);
使用组合数字,一行:
numbers = [zeros(1,D); cell2mat(arrayfun(@(s) fliplr(full(sparse((1:nchoosek(D,s)).'*ones(1,s), nchoosek(1:D,s), 1))), 0:S, 'uni', 0).')];
答案 2 :(得分:0)
这是一个有效提供所有事件的复制解决方案:
Bstr =dec2bin(1:31);
Bstr(sum(dec2bin(0:31),2)<=sum('00111'),:)=='1'
受@pyStarter
解决方案的启发