【发布时间】:2012-07-04 01:14:52
【问题描述】:
好的,这似乎是一个奇怪的问题,但请耐心等待。
所以我在 .m 文件中有一个随机向量,其中内置了某些约束。这是我的代码:
randvecall = randsample(done, done, true);
randvec = randvecall([1;diff(randvecall(:))]~=0);
“完成”只是我们从中提取样本的值的范围,所以不用担心。如您所见,此 randsamples 从一系列值中进行采样,然后使用 diff 函数修剪此随机向量,从而删除连续的重复值。向量中仍有可能出现重复值,但它们根本不可能是连续的。
这一切都很好,并且工作得很好。
比如说,randvec 看起来像这样:
randvec =
54
47
52
26
39
2
14
51
24
6
19
56
34
46
12
7
41
18
29
7
实际上要长得多,大约有 60-70 个值,但你明白了。
我想要做的是在这个向量上添加一点额外的约束。当我从这个向量中采样时,这些值会根据它们的范围进行分类。所以 1-15 的值是第 1 类,16-30 是第 2 类,依此类推。造成这种情况的原因并不重要,但它是程序中非常重要的一部分。因此,如果您查看我在上面提供的值,您会看到这样的部分:
7
41
18
29
7
这实际上对我的程序不利。因为值范围是分开处理的,所以 41、18 和 29 的使用与 7 不同。因此,出于所有意图和目的,7 连续出现在我的脚本中。我想要做的是在生成向量时以某种方式解析/修改/无论向量,以便某个范围内的相同数字不能“连续”出现两次,无论它们之间有多少来自不同范围的其他数字。这有意义吗/我描述得好吗?所以,我希望 MATLAB 搜索向量,并且对于特定范围内的所有值(1-15、16-30、31-45、46-60),确保同一范围内的“连续”值不相同。
那么,这就是我想要做的。这可能无论如何都不是最好的方法,所以当然,任何建议/替代方案都值得赞赏。我知道我可以用多个向量做得更好,但是由于各种原因,我需要它是一个单一的长向量(我的脚本的设计方式如果我为每个值范围都有一个单独的向量,它就行不通) .
【问题讨论】:
-
老实说,这似乎是一件很奇怪的事情:D 为什么不在一开始就对第一个向量进行分组?
-
等一下,不就是
unique吗?你在找吗? -
你不能为每个类别制作一个单独的向量吗?
-
您可以使用模数数学将它们合并到您要查找的范围中,然后如果您愿意,并且如果我遵循您想要的,则应用唯一命令。
-
我不想使用唯一的,因为我仍然想要重复的值,而不是连续的值。所以,如果 A = [9 28 40 9 55 38 6 9],unique 会给我 [6 9 28 38 40 55]。我想要 [9 28 40 55 38 6 9]。我只想从同一范围内删除连续的重复项。上面的第二个 9 不会被删除,因为 6 和它在同一个范围内,所以它不是连续的重复。是的,我意识到这是一件奇怪的事情。老实说,这并不重要,这更像是一时兴起,呵呵。
标签: matlab random vector duplicates