【发布时间】:2015-04-27 00:31:42
【问题描述】:
好的,所以我有一个脚本,它将生成我的某个间隔的重复整数向量,但现在有一个特定的实例,我需要确保一旦它被洗牌,数字不会重复。因此,例如,我生成了一个重复 1-5、36 次的向量,经过洗牌。如何确保洗牌后没有重复的数字?为了让事情变得更加复杂,我需要生成两个这样的向量,它们在同一索引处永远不会具有相同的值。例如,假设这些向量重复了两次 1:5,那么这就是我要寻找的:
v1 v2
4 2
2 4
3 2
5 3
4 5
1 4
5 1
1 5
3 1
2 3
我现在通过以 1 个向量为例,然后将其移开 1 以创建另一个满足要求的向量,但在我的情况下,这实际上行不通,因为我不能让它们系统化像那样依赖。
所以我尝试了一种递归技术,如果向量没有进行剪切,并且正如预期的那样,脚本并没有顺利进行,那么我就可以让脚本重新开始。我达到了最大的递归迭代,我意识到这显然不是要走的路。还有其他选择吗?
编辑:
所以我在下面的代码中找到了一种方法来满足我上面需要的一些条件:
a = nchoosek(1:5,2);
b = horzcat(a(:,2),a(:,1));
c = vertcat(a,b);
cols = repmat(c,9,1);
cols = cols(randperm(180),:);
我只需要找到一种方法来打乱 cols 也将强制列中没有重复数字,例如 cols(i,1) ~= cols(i+1,1) 和 cols(i,2) ~=列(i+1,2)
【问题讨论】:
-
你关心周期性吗?你能把一个小数组洗牌,然后用
repmat吗? -
相关(非重复)问题:stackoverflow.com/questions/19643799/…
标签: matlab vector numbers repeat