【发布时间】:2012-09-21 01:24:27
【问题描述】:
我有一个 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
非常感谢任何 cmets。谢谢。
【问题讨论】:
-
1) 在某些情况下,这是不可能的。例如,当所有 order(:,3) 都相等时。 2)你想让洗牌是随机的吗? 3) 是作业吗?
-
感谢您的建议,不是作业,是实验。
标签: matlab constraints shuffle