-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpmf.py
More file actions
27 lines (22 loc) · 677 Bytes
/
pmf.py
File metadata and controls
27 lines (22 loc) · 677 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from collections import Counter
from typing import Optional
import numpy as np
def make_pmf(
data: list,
start: Optional[float] = None,
stop: Optional[float] = None,
) -> np.ndarray:
"""Extract empirical probability mass function from data."""
_data = np.array(data)
if start is None:
start = np.min(data)
if stop is None:
stop = np.max(data)
_data = _data[(start <= _data) & (_data <= stop)]
counter_dict = Counter(_data)
pmf = np.array(
[list(counter_dict.keys()), list(counter_dict.values())], dtype=float
).T
pmf = pmf[np.argsort(pmf[:, 0])]
pmf[:, 1] = pmf[:, 1] / len(_data)
return pmf