Генерировать случайное число от 1 до 10, за исключением одного числа в matlab

Я хотел бы создать случайное число от 1 до 10, используя, например, randi([1,10]), но я хотел бы исключить одно число, например 7 - это число всегда будет меняться и указываться в переменной с именем b.

Возможно ли это сделать?

Ответ 1

Используйте 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));

Ответ 2

Для тех, у кого нет инструментария статистики:

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

затем

pop(randperm(9,1))

или для n случайных целых чисел из популяции:

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

Ответ 3

Как упоминалось в @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));