У меня есть матрица 192 x 3, порядок (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
Любые комментарии очень ценятся. Спасибо.