12

例如,我想生成一个介于 1 和 10 之间的随机数,randi([1,10])但我想排除一个数字,比如 7 - 这个数字总是会改变并在一个名为b.

有可能以某种方式做到吗?

4

3 回答 3

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));
于 2013-04-17T08:18:52.913 回答
5

For those without the statistics toolbox:

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

then

pop(randperm(9,1))

or for n random integers from the population:

pop(randi(numel(pop), 1, n))
于 2013-04-17T08:33:35.973 回答
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

或者类似地,如果@EitanT 提到的“randsample”函数不可用,

v = [1:b-1,b+1:10];
x = v(ceil(numel(v) * rand));
于 2013-04-17T08:36:06.123 回答