我有一个数据集有30个实例。我必须为每10 10个实例选择4个随机不同的变量

时间:2018-03-05 16:10:13

标签: matlab

来自1-10个实例的4个不同数据,另外4个来自11-20个实例,另外4个来自21-30个实例。

我用过 randperm(n,k)函数

k-> 4%没有不同的数据

n%范围从第1个实例随机选择

因此,在第一次迭代中,n = 10.因此它将从第1至第10个实例中随机获取

n第二次必须在11-20

的范围内

所以,我尝试给n = 20,但后来我想。它将从1-20搜索我想要11-20的位置。

因此,未在第一次迭代(1-10)中选择的数据可以在此迭代中出现 例如,如果2,4,6,7在第一次迭代中选择。在第二次迭代中,除了2,4,6,7之外,它将在1-20之间进行选择。所以,第3,第8个实例可以来。我想要的地方应该在11-20之内

最终它将存储4个索引 rnd = randperm(n,k) xr1 = rnd(1)%存储在rnd

中的第一个索引值

c是计数器中的循环从0开始

因此,对于第二次迭代c = 1

我做了一些小调整 获取数据后

xr1 = rnd(1)+ c * 10

所以,确切地说,我没有得到随机值 如果在第一轮中选择2,4,6,7 所以,在圆形我选择12,14,16,17

这不是永久性修复

有人知道怎么做吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

您知道randperm(10,4)为您提供范围1-10中的4个唯一整数。要获得11-20范围内的4个唯一整数,只需添加10.对于范围21-30,添加20:

randperm(10,4)       % 4 random unique integers in range 1-10
randperm(10,4) + 10  % 4 random unique integers in range 11-20   
randperm(10,4) + 20  % 4 random unique integers in range 21-30

答案 1 :(得分:0)

我认为这里的方法比randperm更好。 如果你想要2个限制之间的随机整数,请检查:

desired_number = round(10 +(20 - 10)。* rand(1,1));

此代码将为您提供10到20之间的随机整数,您可以使用变量更改10和20并使用for或while循环

简而言之: 式: desired_number = round(a +(b - a)。* rand(1,1)); 其中“a”是下限“b”是上限。 我希望这能回答你的问题,如果没有,请随时提出。