我在调整数字随机结果时遇到问题,
jum_k = 14;
jum_b = 12;
result = randint(jum_k, jum_b, [0 2]);
从而对最终结果有约束。值“0”不应连续出现超过 3 次。
我在调整数字随机结果时遇到问题,
jum_k = 14;
jum_b = 12;
result = randint(jum_k, jum_b, [0 2]);
从而对最终结果有约束。值“0”不应连续出现超过 3 次。
然后,您的随机条目以未知的权重非均匀分布,即每行零的数量可以 <= 3 ([0, 1, 2, 3])。我会这样解决它:[m x n]
在 [1,2] 中均匀地填充一个矩阵,选择(随机)每行零个数,然后选择(随机)它们的位置。例子:
jum_k = 14;
jum_b = 12;
result = randi([1, 2], jum_k, jum_b);
for i = 1:jum_k
nZeros = randi([0, 3]); % number of zeros (random)
result(i, randi(jum_b, 1, nZeros)) = 0; % locations in line (random)
end;
如果您需要每行的确切数量的零,您可以相应地进行修改。
编辑(在澄清评论中的问题后):为了每行按顺序容纳不超过 3 个零,例如,[1,0,0,0...2]
您可以按元素填充矩阵并检查先前元素中的模式 [0,0,0,0] (保留先前值的缓冲区)。
result = nan(jum_k, jum_b); % intitialize
for i = 1:jum_k
for j = 1:jum_b
result(i, j) = randi([0, 2]); % assign value
if j>3 && ~all(result(i, j-3:j)) % check previous values
result(i, j-randi([0, 3])) = randi([1, 2]); % randomly change one
end
end
end
%% check/test that all lines have less 4 zeros in sequence
f = @strfind;
for i = 1:jum_k
t(i) = isempty(f(result(i,:),[0 0 0 0]));
end
T = all(t);
它不是最佳的(MATLAB 方面),但可以完成这项工作。