bucketing values

18 visualizzazioni (ultimi 30 giorni)
Greg
Greg il 21 Lug 2011
Hi
I have a vector of values from 0 to 1 representing probabilities
A = [0.8756 0.1185 0.0059]
How can i generate a random number using rand() and map it to a value in A without looping. I can;t see how i can do this with vectorisation or with the built in functions.
My aim is generate a random numbers so 87% of the time I choose A(1), 11% A(2), etc...
Thanks

Risposta accettata

Teja Muppirala
Teja Muppirala il 21 Lug 2011
If you have the Statistics Toolbox installed, there is the built-in RANDSAMPLE command to do this.
A = [0.8756 0.1185 0.0059];
X = randsample(numel(A),5000,true, A); % X gets 5000 samples
tabulate(X)

Più risposte (5)

Daniel Shub
Daniel Shub il 21 Lug 2011
Assuming your array A is short ...
A = [0.8756 0.1185 0.0059]
x = rand(1e3, 1);
y(x < A(1)) = 'a';
y(x >= A(1) & x < A(2)) = 'b';
y(x >= A(2)) = 'c';
  2 Commenti
Fangjun Jiang
Fangjun Jiang il 21 Lug 2011
I think all the answers provided are along the same line. In your case, the A needs to be [0.87,0.98,1].
Daniel Shub
Daniel Shub il 21 Lug 2011
You are correct. I was sloppy.

Accedi per commentare.


Sean de Wolski
Sean de Wolski il 21 Lug 2011
Like this?
A = [0.8756 0.1185 0.0059]; %percentiles (must sum to 1
R = rand(1,1000); %random data
B = [11 17 19]; %sample data to extract A% of the time
[junk,Bin] = histc(R,[-inf cumsum(A)]); %find the bin
C = B(Bin) %extract

Fangjun Jiang
Fangjun Jiang il 21 Lug 2011
Something like this:
A = [0.8756 0.1185 0.0059];
RandNum=rand(1000,1);
Index=2*ones(size(RandNum));
Index(RandNum<A(1))=1;
Index(RandNum>1-A(3))=3;
sum(Index==1)
sum(Index==2)
sum(Index==3)
ans =
892
ans =
102
ans =
6
close enough?

Greg
Greg il 21 Lug 2011
Thanks for all the answser
I'm not sure which idea scales better as in general A[] will be of different sizes so I can't explicitly code for 3 items.
I'm fairly new to Matlab so any further pointers is much appreciated.
Thanks
  1 Commento
Sean de Wolski
Sean de Wolski il 21 Lug 2011
Randsample and Histc are both automated for large/varying A.

Accedi per commentare.


Greg
Greg il 21 Lug 2011
Thanks Teja
I have the Stats Toolbox so this looks to be exactly what i'm looking for. I will play around with this some more but so far so good
Cheers Greg

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by