私は192x3の行列、order(192 x 3)を持っています:
order(:、1)とorder(:、2)は両方とも1〜16の繰り返し値を含み、order(:、3)は1と2の繰り返し値を含みます。これ以上の繰り返しを防ぎながら、マトリックスをシャッフルする必要があります。最後の列に同じ値が3つ以上あるため、order(:、3)に1または2の繰り返しが3回を超えて表示されないようにする必要があります。
これは私が持っているもので、マトリックスの小さいバージョンでは問題なく機能しましたが、少し大きいマトリックスでスタックしているようです。
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
コメントは大歓迎です。ありがとう。