2014-11-19 3 views
2

В MATALB у меня есть набор номеров P. Я хотел бы создать случайный массив размером N из этого набора.Произвольно создавать числа из набора?

Для примера предположим, что у меня есть набор {1, 4}. Скажем, я хотел бы создать массив размером 5 (например, [1 1 4 1 4]).

Я сделал следующее: Я создал следующий массив, используя randi.

N = 5; 
v = randi([1 4],[1 N]); 

Проблема заключается в том, что я получил случайный массив, содержащий значения в 1:4 и не в {1, 4}. Я могу просто сделать это, но мне нужен лучший способ.

for i = 1:length(v) 
    if v(i) ~= 1 || v(i) ~= 4 
     v(i) = 1; % or v(i) = 4 
    end 
end 

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

ответ

4

Вы должны использовать datasample,

y = datasample(data,k)k возвращает наблюдения выборочные случайно равномерно, с заменой, из данных data.

a = [1,4]; 
datasample(a,5) 

В зависимости от использования, вы можете рассмотреть возможность использования,

datasample(unique(a),5) 
+0

Это работает! Спасибо. – Jika

3

Если вы не имеете Statistics Toolbox (который содержит функцию datasample), вы можете использовать randi:

N = 5; %// desired number of samples 
data = [1 4]; %// data values 
sample = data(randi(numel(data),1,N)); 

И если вы используете очень старую версию Matlab, у которой нет randi, вы можете использовать rand:

sample = data(ceil(numel(data)*rand(1,N))); 
Смежные вопросы