生成1到10之间的随机数,但matlab中的单个数字除外

时间:2013-04-17 08:13:34

标签: matlab

我想使用例如randi([1,10])生成1到10之间的随机数,但我想排除一个数字,比如说7 - 这个数字总是会改变并在名为{{的变量中指定1}}。

这可能以某种方式吗?

3 个答案:

答案 0 :(得分:18)

使用randsample。例如,要生成1到10之间的数字(不包括7),请执行以下操作:

b = 7;
x = randsample(setdiff(1:10, b), 1);

此处setdiff用于从向量b中排除1:10的值。

如果您没有安装统计工具箱,则无法使用randsample,因此请使用rand

v = setdiff(1:10, b);
x = v(ceil(numel(v) * rand));

答案 1 :(得分:5)

对于那些没有统计工具箱的人:

b = 7;
pop = 1:10;
pop(b) = [];

然后

pop(randperm(9,1))

或来自人口的n个随机整数:

pop(randi(numel(pop), 1, n))

答案 2 :(得分:1)

正如@EitanT所提到的,你可以使用randsample这样做,但我认为以更简单的方式这样做应该适合你:

>> b = 7;
>> randsample([1:b-1,b+1:10],1)

这只是对数组[1:b-1,b+1:10]中的随机值进行采样,这将是

1     2     3     4     5     6     8     9    10

或者类似地,如果'randsample'函数不可用,如@EitanT所提到的那样,

v = [1:b-1,b+1:10];
x = v(ceil(numel(v) * rand));