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

问题描述 投票:0回答:2

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

我用过randperm(n,k)函数

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

n%范围从1-nth实例随机选择

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

n第二次必须在11-20范围内

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

因此,如果在第一次迭代中选择2,4,6,7,那么未在第一次迭代(1-10)中选择的数据可以进入此迭代。在第二次迭代中,除了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

这不是永久性的解决方案

有人知道怎么做吗?

提前致谢

matlab
2个回答
1
投票

你知道randperm(10,4)给你1个范围1-10的唯一整数。要获得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

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”是上限。我希望这能回答你的问题,如果没有,请随时提出。

© www.soinside.com 2019 - 2024. All rights reserved.