<div dir="ltr"><div><div><div>Hi Nadav,<br><br></div>I may be wrong, but I think that the result of the current implementation is actually the expected one.<br></div>Using you example: probabilities for item 1, 2 and 3 are: 0.2, 0.4 and 0.4<br><br></div><div>P([1,2]) = P([2] | 1st=[1]) P([1]) + P([1] | 1st=[2]) P([2])<br><br></div><div>Now, P([1]) = 0.2 and P([2]) = 0.4. However:<br> P([2] | 1st=[1]) = 0.5     (2 and 3 have the same sampling probability)<br> P([1] | 1st=[2]) = 1/3     (1 and 3 have probability 0.2 and 0.4 that, once normalised, translate into 1/3 and 2/3 respectively)<br></div><div>Therefore P([1,2]) = 0.7/3 = 0.23333<br></div><div>Similarly, P([1,3]) = 0.23333 and P([2,3]) = 1.6/3 = 0.533333<br><br></div><div>What am I missing?<br><br></div><div>Alessandro<br></div><div> <br></div><div><div><div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2017-01-17 13:00 GMT+01:00  <span dir="ltr"><<a href="mailto:numpy-discussion-request@scipy.org" target="_blank">numpy-discussion-request@scipy.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Hi, I'm looking for a way to find a random sample of C different items out<br>
of N items, with a some desired probabilty Pi for each item i.<br>
<br>
I saw that numpy has a function that supposedly does this,<br>
numpy.random.choice (with replace=False and a probabilities array), but<br>
looking at the algorithm actually implemented, I am wondering in what sense<br>
are the probabilities Pi actually obeyed...<br>
<br>
To me, the code doesn't seem to be doing the right thing... Let me explain:<br>
<br>
Consider a simple numerical example: We have 3 items, and need to pick 2<br>
different ones randomly. Let's assume the desired probabilities for item 1,<br>
2 and 3 are: 0.2, 0.4 and 0.4.<br>
<br>
Working out the equations there is exactly one solution here: The random<br>
outcome of numpy.random.choice in this case should be [1,2] at probability<br>
0.2, [1,3] at probabilty 0.2, and [2,3] at probability 0.6. That is indeed<br>
a solution for the desired probabilities because it yields item 1 in<br>
[1,2]+[1,3] = 0.2 + 0.2 = 2*P1 of the trials, item 2 in [1,2]+[2,3] =<br>
0.2+0.6 = 0.8 = 2*P2, etc.<br>
<br>
However, the algorithm in numpy.random.choice's replace=False generates, if<br>
I understand correctly, different probabilities for the outcomes: I believe<br>
in this case it generates [1,2] at probability 0.23333, [1,3] also 0.2333,<br>
and [2,3] at probability 0.53333.<br>
<br>
My question is how does this result fit the desired probabilities?<br>
<br>
If we get [1,2] at probability 0.23333 and [1,3] at probability 0.2333,<br>
then the expect number of "1" results we'll get per drawing is 0.23333 +<br>
0.2333 = 0.46666, and similarly for "2" the expected number 0.7666, and for<br>
"3" 0.76666. As you can see, the proportions are off: Item 2 is NOT twice<br>
common than item 1 as we originally desired (we asked for probabilities<br>
0.2, 0.4, 0.4 for the individual items!).<br>
<br>
<br>
--<br>
Nadav Har'El<br>
<a href="mailto:nyh@scylladb.com">nyh@scylladb.com</a><br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <<a href="https://mail.scipy.org/pipermail/numpy-discussion/attachments/20170117/d1f0a1db/attachment-0001.html" rel="noreferrer" target="_blank">https://mail.scipy.org/<wbr>pipermail/numpy-discussion/<wbr>attachments/20170117/d1f0a1db/<wbr>attachment-0001.html</a>><br>
<br>
------------------------------<br>
<br>
Subject: Digest Footer<br>
<br>
______________________________<wbr>_________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.scipy.org/<wbr>mailman/listinfo/numpy-<wbr>discussion</a><br>
<br>
<br>
------------------------------<br>
<br>
End of NumPy-Discussion Digest, Vol 124, Issue 24<br>
******************************<wbr>*******************<br>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><font size="1">--------------------------------------------------------------------------</font><font size="1"><br>
NOTICE:</font><font size="1"> Dlgs 196/2003 this e-mail and any attachments thereto may contain confidential information and are intended for the sole
 use of the recipient(s) named above.  If you are not the intended 
recipient of this message you are hereby notified that any dissemination
 or copying of this message is strictly prohibited. If you have received
 this e-mail in error, please notify the sender either by telephone or 
by e-mail and delete the material from any computer. Thank you.</font><font size="1"><br>
------------------------------</font><font size="1">------------------------------</font><font size="1">--------------</font></div>
</div></div></div></div></div></div></div>