Załóżmy, że masz:Czy istnieje funkcja "freq" w numpy/python?
arr = np.array([1,2,1,3,3,4])
Czy jest wbudowany w funkcji, która zwraca najczęstszą elementu?
Załóżmy, że masz:Czy istnieje funkcja "freq" w numpy/python?
arr = np.array([1,2,1,3,3,4])
Czy jest wbudowany w funkcji, która zwraca najczęstszą elementu?
Tak, Python collections.Counter ma bezpośrednie wsparcie dla znalezienia najczęstsze elementy:
>>> from collections import Counter
>>> Counter('abracadbra').most_common(2)
[('a', 4), ('r', 2)]
>>> Counter([1,2,1,3,3,4]).most_common(2)
[(1, 2), (3, 2)]
Z numpy, warto zacząć od histogram() function lub bincount() function.
Z scipy można wyszukać element modalny za pomocą mstats.mode.
Moduł pandas
może być również pomocny tutaj. pandas
to zgrabny pakiet do analizy danych dla Pythona, a także ma wsparcie dla tego problemu.
import pandas as pd
arr = np.array([1,2,1,3,3,4])
arr_df = pd.Series(arr)
value_counts = arr_df.value_counts()
most_frequent = value_counts.max()
to zwraca
> most_frequent
2
To będzie pracować dla każdego typu, Integer, czy nie, a powrót jest zawsze numpy tablicy:
def most_common(a, n=1) :
if a.dtype.kind not in 'bui':
items, _ = np.unique(a, return_inverse=True)
else:
items, _ = None, a
counts = np.bincount(_)
idx = np.argsort(counts)[::-1][:n]
return idx.astype(a.dtype) if items is None else items[idx]
>>> a = np.fromiter('abracadabra', dtype='S1')
>>> most_common(a, 2)
array(['a', 'r'],
dtype='|S1')
>>> a = np.random.randint(10, size=100)
>>> a
array([0, 0, 0, 9, 3, 9, 1, 2, 6, 3, 0, 4, 3, 2, 4, 7, 2, 8, 8, 2, 9, 7, 0,
3, 5, 2, 5, 0, 4, 2, 4, 7, 8, 5, 4, 0, 1, 6, 1, 0, 2, 0, 5, 1, 3, 8,
8, 6, 3, 5, 4, 3, 3, 5, 0, 7, 3, 0, 2, 5, 4, 2, 4, 2, 8, 1, 4, 4, 7,
4, 4, 3, 7, 4, 0, 1, 0, 8, 8, 1, 1, 2, 1, 4, 2, 5, 1, 0, 7, 2, 0, 0,
0, 8, 9, 9, 8, 1, 3, 8])
>>> most_common(a, 5)
array([0, 4, 2, 8, 3])
użycie 'np.bincount' jeśli wszystko elementy są liczbami całkowitymi. – nye17