Генерировать случайное число от 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));