Grade of Service Probability Function Python
Clash Royale CLAN TAG#URR8PPP
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty margin-bottom:0;
up vote
3
down vote
favorite
Consider the following typical probability scenario:
I defined this function to handle that scenario, I'm curious if Python has a more efficient method to handle this, or if this is the best way:
from scipy.special import binom
def grade_of_service(n, p, c):
prob = 0
k = c + 1
while k <= n:
prob += binom(n, k)*(p**k)*((1-p)**(n-k))
k += 1
return prob
EDIT: Here's an example solution from the author of this example: "If n = 100, p=0.1, and c=15, the probability of interest turns out to be 0.0399."
My probability does round to this result. But due to the roundoff error / numerical precision, it doesn't seem to matter if k = n or k = n+1.
python python-3.x mathematics statistics scipy
add a comment |Â
up vote
3
down vote
favorite
Consider the following typical probability scenario:
I defined this function to handle that scenario, I'm curious if Python has a more efficient method to handle this, or if this is the best way:
from scipy.special import binom
def grade_of_service(n, p, c):
prob = 0
k = c + 1
while k <= n:
prob += binom(n, k)*(p**k)*((1-p)**(n-k))
k += 1
return prob
EDIT: Here's an example solution from the author of this example: "If n = 100, p=0.1, and c=15, the probability of interest turns out to be 0.0399."
My probability does round to this result. But due to the roundoff error / numerical precision, it doesn't seem to matter if k = n or k = n+1.
python python-3.x mathematics statistics scipy
Do you have some example inputs we can test with? Preferably edge cases.
â Peilonrayz
Jun 21 at 22:05
@Peilonrayz, I edited to provide an example solution from the example author. I don't have any edge cases yet but will mess with some numbers to see if I can find some.
â Hanzy
Jun 21 at 22:11
add a comment |Â
up vote
3
down vote
favorite
up vote
3
down vote
favorite
Consider the following typical probability scenario:
I defined this function to handle that scenario, I'm curious if Python has a more efficient method to handle this, or if this is the best way:
from scipy.special import binom
def grade_of_service(n, p, c):
prob = 0
k = c + 1
while k <= n:
prob += binom(n, k)*(p**k)*((1-p)**(n-k))
k += 1
return prob
EDIT: Here's an example solution from the author of this example: "If n = 100, p=0.1, and c=15, the probability of interest turns out to be 0.0399."
My probability does round to this result. But due to the roundoff error / numerical precision, it doesn't seem to matter if k = n or k = n+1.
python python-3.x mathematics statistics scipy
Consider the following typical probability scenario:
I defined this function to handle that scenario, I'm curious if Python has a more efficient method to handle this, or if this is the best way:
from scipy.special import binom
def grade_of_service(n, p, c):
prob = 0
k = c + 1
while k <= n:
prob += binom(n, k)*(p**k)*((1-p)**(n-k))
k += 1
return prob
EDIT: Here's an example solution from the author of this example: "If n = 100, p=0.1, and c=15, the probability of interest turns out to be 0.0399."
My probability does round to this result. But due to the roundoff error / numerical precision, it doesn't seem to matter if k = n or k = n+1.
python python-3.x mathematics statistics scipy
edited Jun 21 at 22:10
asked Jun 21 at 21:53
Hanzy
929
929
Do you have some example inputs we can test with? Preferably edge cases.
â Peilonrayz
Jun 21 at 22:05
@Peilonrayz, I edited to provide an example solution from the example author. I don't have any edge cases yet but will mess with some numbers to see if I can find some.
â Hanzy
Jun 21 at 22:11
add a comment |Â
Do you have some example inputs we can test with? Preferably edge cases.
â Peilonrayz
Jun 21 at 22:05
@Peilonrayz, I edited to provide an example solution from the example author. I don't have any edge cases yet but will mess with some numbers to see if I can find some.
â Hanzy
Jun 21 at 22:11
Do you have some example inputs we can test with? Preferably edge cases.
â Peilonrayz
Jun 21 at 22:05
Do you have some example inputs we can test with? Preferably edge cases.
â Peilonrayz
Jun 21 at 22:05
@Peilonrayz, I edited to provide an example solution from the example author. I don't have any edge cases yet but will mess with some numbers to see if I can find some.
â Hanzy
Jun 21 at 22:11
@Peilonrayz, I edited to provide an example solution from the example author. I don't have any edge cases yet but will mess with some numbers to see if I can find some.
â Hanzy
Jun 21 at 22:11
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
Pure Python
- You should use a
for
loop rather than a while loop. - You can use a generator comprehension to build all
prob
's. - You can use
sum
to get the sum.
def grade_of_service(n, p, c):
return sum(binom(n, k)*(p**k)*((1-p)**(n-k)) for k in range(c+1, n+1))
Numpy and friends
- Use
numpy.arange
rather thanrange
. - Write out the equation same as above, just not in a comprehension.
- Change
sum
tonumpy.sum
.
import numpy
def grade_of_service(n, p, c):
k = numpy.arange(c+1, n+1)
return numpy.sum(binom(n, k)*(p**k)*((1-p)**(n-k)))
This has a problem with numbers that exceed a certain size, as numpy numbers are finite.
Thank you this will be more efficient in the case the variables get incredibly large, the generator will save me a lot of memory usage. In practical use if the probability meets a threshold is really all that matters, so as long as the precision is down to .001 it probably wonâÂÂt make a difference. Since they are probabilities they will never exceed 1, and anything below .01 in practice probably doesnâÂÂt need to be that precise.
â Hanzy
Jun 21 at 22:17
add a comment |Â
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
Pure Python
- You should use a
for
loop rather than a while loop. - You can use a generator comprehension to build all
prob
's. - You can use
sum
to get the sum.
def grade_of_service(n, p, c):
return sum(binom(n, k)*(p**k)*((1-p)**(n-k)) for k in range(c+1, n+1))
Numpy and friends
- Use
numpy.arange
rather thanrange
. - Write out the equation same as above, just not in a comprehension.
- Change
sum
tonumpy.sum
.
import numpy
def grade_of_service(n, p, c):
k = numpy.arange(c+1, n+1)
return numpy.sum(binom(n, k)*(p**k)*((1-p)**(n-k)))
This has a problem with numbers that exceed a certain size, as numpy numbers are finite.
Thank you this will be more efficient in the case the variables get incredibly large, the generator will save me a lot of memory usage. In practical use if the probability meets a threshold is really all that matters, so as long as the precision is down to .001 it probably wonâÂÂt make a difference. Since they are probabilities they will never exceed 1, and anything below .01 in practice probably doesnâÂÂt need to be that precise.
â Hanzy
Jun 21 at 22:17
add a comment |Â
up vote
1
down vote
accepted
Pure Python
- You should use a
for
loop rather than a while loop. - You can use a generator comprehension to build all
prob
's. - You can use
sum
to get the sum.
def grade_of_service(n, p, c):
return sum(binom(n, k)*(p**k)*((1-p)**(n-k)) for k in range(c+1, n+1))
Numpy and friends
- Use
numpy.arange
rather thanrange
. - Write out the equation same as above, just not in a comprehension.
- Change
sum
tonumpy.sum
.
import numpy
def grade_of_service(n, p, c):
k = numpy.arange(c+1, n+1)
return numpy.sum(binom(n, k)*(p**k)*((1-p)**(n-k)))
This has a problem with numbers that exceed a certain size, as numpy numbers are finite.
Thank you this will be more efficient in the case the variables get incredibly large, the generator will save me a lot of memory usage. In practical use if the probability meets a threshold is really all that matters, so as long as the precision is down to .001 it probably wonâÂÂt make a difference. Since they are probabilities they will never exceed 1, and anything below .01 in practice probably doesnâÂÂt need to be that precise.
â Hanzy
Jun 21 at 22:17
add a comment |Â
up vote
1
down vote
accepted
up vote
1
down vote
accepted
Pure Python
- You should use a
for
loop rather than a while loop. - You can use a generator comprehension to build all
prob
's. - You can use
sum
to get the sum.
def grade_of_service(n, p, c):
return sum(binom(n, k)*(p**k)*((1-p)**(n-k)) for k in range(c+1, n+1))
Numpy and friends
- Use
numpy.arange
rather thanrange
. - Write out the equation same as above, just not in a comprehension.
- Change
sum
tonumpy.sum
.
import numpy
def grade_of_service(n, p, c):
k = numpy.arange(c+1, n+1)
return numpy.sum(binom(n, k)*(p**k)*((1-p)**(n-k)))
This has a problem with numbers that exceed a certain size, as numpy numbers are finite.
Pure Python
- You should use a
for
loop rather than a while loop. - You can use a generator comprehension to build all
prob
's. - You can use
sum
to get the sum.
def grade_of_service(n, p, c):
return sum(binom(n, k)*(p**k)*((1-p)**(n-k)) for k in range(c+1, n+1))
Numpy and friends
- Use
numpy.arange
rather thanrange
. - Write out the equation same as above, just not in a comprehension.
- Change
sum
tonumpy.sum
.
import numpy
def grade_of_service(n, p, c):
k = numpy.arange(c+1, n+1)
return numpy.sum(binom(n, k)*(p**k)*((1-p)**(n-k)))
This has a problem with numbers that exceed a certain size, as numpy numbers are finite.
answered Jun 21 at 22:11
Peilonrayz
24.3k336102
24.3k336102
Thank you this will be more efficient in the case the variables get incredibly large, the generator will save me a lot of memory usage. In practical use if the probability meets a threshold is really all that matters, so as long as the precision is down to .001 it probably wonâÂÂt make a difference. Since they are probabilities they will never exceed 1, and anything below .01 in practice probably doesnâÂÂt need to be that precise.
â Hanzy
Jun 21 at 22:17
add a comment |Â
Thank you this will be more efficient in the case the variables get incredibly large, the generator will save me a lot of memory usage. In practical use if the probability meets a threshold is really all that matters, so as long as the precision is down to .001 it probably wonâÂÂt make a difference. Since they are probabilities they will never exceed 1, and anything below .01 in practice probably doesnâÂÂt need to be that precise.
â Hanzy
Jun 21 at 22:17
Thank you this will be more efficient in the case the variables get incredibly large, the generator will save me a lot of memory usage. In practical use if the probability meets a threshold is really all that matters, so as long as the precision is down to .001 it probably wonâÂÂt make a difference. Since they are probabilities they will never exceed 1, and anything below .01 in practice probably doesnâÂÂt need to be that precise.
â Hanzy
Jun 21 at 22:17
Thank you this will be more efficient in the case the variables get incredibly large, the generator will save me a lot of memory usage. In practical use if the probability meets a threshold is really all that matters, so as long as the precision is down to .001 it probably wonâÂÂt make a difference. Since they are probabilities they will never exceed 1, and anything below .01 in practice probably doesnâÂÂt need to be that precise.
â Hanzy
Jun 21 at 22:17
add a comment |Â
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f197013%2fgrade-of-service-probability-function-python%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Do you have some example inputs we can test with? Preferably edge cases.
â Peilonrayz
Jun 21 at 22:05
@Peilonrayz, I edited to provide an example solution from the example author. I don't have any edge cases yet but will mess with some numbers to see if I can find some.
â Hanzy
Jun 21 at 22:11