randomly select different elements of a vector

14 次查看(过去 30 天)
Hello,
I am looking to select n random elements from a vector, but none of the elements can be the same. for example x=[1 1 1 2 3 4 4 4 5 6 7 7], I want to select 4 random unique elements from x, giving 1, 4, 7, 6.
Thanks
Steve

采纳的回答

Thorsten
Thorsten 2016-7-22
x = [1 1 1 2 3 4 4 4 5 6 7 7];
for i = 1:4
ind = randperm(numel(x), 1); % select one element out of numel(x) elements, with the probability of occurrence of the element in x
r(i) = x(ind);
x(x==r(i)) = []; % delete this element from the sample, such that the picked elements are unique
end

更多回答(2 个)

the cyclist
the cyclist 2016-7-21
编辑:the cyclist 2016-7-21
x=[1 1 1 2 3 4 4 4 5 6 7 7];
ux = unique(x);
rx = randsample(ux,4,false);
Note that this will break if there are fewer than four unique elements in x, but it is easy to put in a safeguard against that. For example,
rx = randsample(ux,min(numel(ux),4),false);
  1 个评论
stephen cusack
stephen cusack 2016-7-22
Apologies I did not frame the question very well. I am looking to take the sample based on the occurrence of each element. So 1 has probability 3/12, 2=1/12, 3=1/12, 4=3/12, 5=1/12, 6=1/12, 7=2/12. Once one element has been chosen it cannot be selected again.

请先登录,再进行评论。


Andrei Bobrov
Andrei Bobrov 2016-7-21
x=[1 1 1 2 3 4 4 4 5 6 7 7];
a = unique(x);
out = a(randperm(numel(a),4))
  1 个评论
stephen cusack
stephen cusack 2016-7-22
Apologies I did not frame the question very well. I am looking to take the sample based on the occurrence of each element. So 1 has probability 3/12, 2=1/12, 3=1/12, 4=3/12, 5=1/12, 6=1/12, 7=2/12. Once one element has been chosen it cannot be selected again.

请先登录,再进行评论。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by