82 lines
1.8 KiB
Python
82 lines
1.8 KiB
Python
|
# Sebastian Raschka 2014-2020
|
||
|
# mlxtend Machine Learning Library Extensions
|
||
|
#
|
||
|
# Functions for different counting operations.
|
||
|
# Author: Sebastian Raschka <sebastianraschka.com>
|
||
|
#
|
||
|
# License: BSD 3 clause
|
||
|
|
||
|
|
||
|
def factorial(n):
|
||
|
if n == 0:
|
||
|
return 1
|
||
|
else:
|
||
|
return n * factorial(n-1)
|
||
|
|
||
|
|
||
|
def num_combinations(n, k, with_replacement=False):
|
||
|
"""
|
||
|
Function to calculate the number of possible combinations.
|
||
|
|
||
|
Parameters
|
||
|
----------
|
||
|
n : `int`
|
||
|
Total number of items.
|
||
|
k : `int`
|
||
|
Number of elements of the target itemset.
|
||
|
with_replacement : `bool` (default: False)
|
||
|
Allows repeated elements if True.
|
||
|
|
||
|
Returns
|
||
|
----------
|
||
|
comb : `int`
|
||
|
Number of possible combinations.
|
||
|
|
||
|
Examples
|
||
|
-----------
|
||
|
For usage examples, please see
|
||
|
http://rasbt.github.io/mlxtend/user_guide/math/num_combinations/
|
||
|
|
||
|
"""
|
||
|
if with_replacement:
|
||
|
numerator = factorial(n + k - 1)
|
||
|
denominator = factorial(k) * factorial(n-1)
|
||
|
else:
|
||
|
numerator = factorial(n)
|
||
|
denominator = factorial(k) * factorial(n-k)
|
||
|
comb = numerator//denominator
|
||
|
return comb
|
||
|
|
||
|
|
||
|
def num_permutations(n, k, with_replacement=False):
|
||
|
"""
|
||
|
Function to calculate the number of possible permutations.
|
||
|
|
||
|
Parameters
|
||
|
----------
|
||
|
n : `int`
|
||
|
Total number of items.
|
||
|
k : `int`
|
||
|
Number of elements of the target itemset.
|
||
|
with_replacement : `bool`
|
||
|
Allows repeated elements if True.
|
||
|
|
||
|
Returns
|
||
|
----------
|
||
|
permut : `int`
|
||
|
Number of possible permutations.
|
||
|
|
||
|
Examples
|
||
|
-----------
|
||
|
For usage examples, please see
|
||
|
http://rasbt.github.io/mlxtend/user_guide/math/num_permutations/
|
||
|
|
||
|
"""
|
||
|
if with_replacement:
|
||
|
permut = n**k
|
||
|
else:
|
||
|
numerator = factorial(n)
|
||
|
denominator = factorial(n-k)
|
||
|
permut = numerator//denominator
|
||
|
return permut
|