scipy.special.comb(N, k, *, exact=False, repetition=False, legacy=<object object>)[source]#

The number of combinations of N things taken k at a time.

This is often expressed as “N choose k”.

Nint, ndarray

Number of things.

kint, ndarray

Number of elements taken.

exactbool, optional

For integers, if exact is False, then floating point precision is used, otherwise the result is computed exactly. For non-integers, if exact is True, is disregarded.

repetitionbool, optional

If repetition is True, then the number of combinations with repetition is computed.

legacybool, optional

If legacy is True and exact is True, then non-integral arguments are cast to ints; if legacy is False, the result for non-integral arguments is unaffected by the value of exact.

Deprecated since version 1.9.0: Using legacy is deprecated and will removed by Scipy 1.14.0. If you want to keep the legacy behaviour, cast your inputs directly, e.g. comb(int(your_N), int(your_k), exact=True).

valint, float, ndarray

The total number of combinations.

See also


Binomial coefficient considered as a function of two real variables.


  • Array arguments accepted only for exact=False case.

  • If N < 0, or k < 0, then 0 is returned.

  • If k > N and repetition=False, then 0 is returned.


>>> import numpy as np
>>> from scipy.special import comb
>>> k = np.array([3, 4])
>>> n = np.array([10, 10])
>>> comb(n, k, exact=False)
array([ 120.,  210.])
>>> comb(10, 3, exact=True)
>>> comb(10, 3, exact=True, repetition=True)