Проблема при генерации случайных векторов с ограничениями на matlab

0

У меня проблема, я хочу создать таблицу из 4 столбцов и 1 строку и целые числа в диапазоне от 0 до 9, без повторения и случайные при каждом запуске.

приходит к этому, но у меня проблема, я всегда генерирую 0 в первом элементе. И я не знаю, как поставить предел 0-9

кто может мне помочь?

Код функции:

function [ n ] = generar(  )

n = [-1 -1 -1 -1];

    for i = 1:4
        r=abs(i);
        dig=floor((r-floor(r))*randn);
            while find (n == dig)
                r=r+1;
                dig=dig+floor(r-randn);
            end
        n(i)=dig;
    end
end

И результаты:

generar()

ans =

 0     3     9     6

generar()

ans =

 0     2     4     8

Я не знаю, является ли этот пост дубликатом, но мне нужна помощь в моей конкретной проблеме.

  • 2
    Вы хотели сделать это с C ++ или Matlab? Почему он помечен обоими?
  • 0
    matlab основан на c ++ или c и был рекомендованным тегом, извините, если я ошибаюсь
Показать ещё 1 комментарий
Теги:
random

2 ответа

1

Итак, предполагая, что вы хотите использовать matlab, потому что код, который вы предоставили, является matlab, вы можете просто сделать это:

randperm(10, 4) - 1

Это даст вам 4 уникальных случайных числа от 0-9.

  • 0
    я пытаюсь, но при запуске приложения происходит сбой
  • 0
    Эта строка должна заменить всю generar() функцию generar() .
0

Другой способ получения randsample(n, k) где n - целое число, тогда из популяции 1:n (в качестве вектора столбца) будет взята случайная выборка размера k. Поэтому для вашего случая вы получите результат:

randsample(10, 4)' - 1

Он рисует 4 случайных числа из населения без замены и всех с одинаковыми весами. Это может быть медленнее, чем randperm(10, 4) - 1 поскольку его реальная сила связана с возможностью пропускать векторы населения для более сложных примеров.

В качестве альтернативы можно вызвать его с помощью randsample(pop, k) где pop - это популяционный вектор, из которого вы хотите нарисовать случайный образец размера k. Итак, для вашего дела, вы бы сделали:

randsample(0:9, 4)

Результат будет иметь тот же размер, что и вектор-популяция, который в этом случае является вектором строки. Просто предложить другое решение и randsample() вас с randsample().

  • 0
    Я постараюсь тебе сказать

Ещё вопросы

Сообщество Overcoder
Наверх
Меню