bucketing values

19 Ansichten (letzte 30 Tage)
Greg
Greg am 21 Jul. 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

Akzeptierte Antwort

Teja Muppirala
Teja Muppirala am 21 Jul. 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)

Weitere Antworten (5)

Daniel Shub
Daniel Shub am 21 Jul. 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 Kommentare
Fangjun Jiang
Fangjun Jiang am 21 Jul. 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 am 21 Jul. 2011
You are correct. I was sloppy.

Melden Sie sich an, um zu kommentieren.


Sean de Wolski
Sean de Wolski am 21 Jul. 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 am 21 Jul. 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 am 21 Jul. 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 Kommentar
Sean de Wolski
Sean de Wolski am 21 Jul. 2011
Randsample and Histc are both automated for large/varying A.

Melden Sie sich an, um zu kommentieren.


Greg
Greg am 21 Jul. 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

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by