我有一个 192 x 3 矩阵,order(192 x 3):
order(:, 1) 和 order(:, 2) 都包含 1 - 16 的重复值,而 order(:, 3) 包含 1 和 2 的重复值。我需要打乱矩阵,同时防止更多的重复最后一列中的相同值超过三个,因此 order(:, 3) 不应显示超过 3 个重复的 1 或 2。
这就是我所拥有的,它适用于较小版本的矩阵就好了,但似乎卡住了一个稍大的矩阵:
not_good = true;
while not_good
not_good = false;
order = Shuffle(order);
% returns an array of 1s and 0s indexing the position of the values for 1 and 2
R1 = order(:, 3) == 1;
R2 = order(:, 3) == 2;
% checks for repeats, returns 1 if repeats are present
rep_test1 = any(diff([1; find(R1)])>3);
rep_test2 = any(diff([1; find(R2)])>3);
if rep_test1 > 0 || rep_test2 > 0
not_good = true;
end
end
非常感谢任何评论。谢谢。