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

use*_*765 12 matlab

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

有可能以某种方式吗?

Eit*_*n T 18

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

b = 7;
x = randsample(setdiff(1:10, b), 1);
Run Code Online (Sandbox Code Playgroud)

这里setdiff用于排除b向量的值1:10.

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

v = setdiff(1:10, b);
x = v(ceil(numel(v) * rand));
Run Code Online (Sandbox Code Playgroud)

  • 对于第二种解决方案,可以使用`x = v(randi(numel(v)));` (2认同)
  • 好吧,`randi`出现在R2008b中,我认为没有统计工具箱的人数比拥有5岁以上版本的人数要多. (2认同)

Dan*_*Dan 5

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

b = 7;
pop = 1:10;
pop(b) = [];
Run Code Online (Sandbox Code Playgroud)

然后

pop(randperm(9,1))
Run Code Online (Sandbox Code Playgroud)

n来自人口的随机整数:

pop(randi(numel(pop), 1, n))
Run Code Online (Sandbox Code Playgroud)

  • @glglgl这个问题并不是真的有必要,但我把它改成了`numel(pop)`,所以如果需要,现在人口甚至可以是一个数字网格. (2认同)