Angenommen, Sie haben:Gibt es eine "freq" -Funktion in numpy/python?
arr = np.array([1,2,1,3,3,4])
Gibt es in Funktion einen eingebauten, die das häufigste Element zurückgibt?
Angenommen, Sie haben:Gibt es eine "freq" -Funktion in numpy/python?
arr = np.array([1,2,1,3,3,4])
Gibt es in Funktion einen eingebauten, die das häufigste Element zurückgibt?
Ja, Python collections.Counter hat direkte Unterstützung der häufigsten Elemente für die Suche:
>>> 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)]
Mit numpy, könnte man mit dem histogram() function oder bincount() function beginnen soll.
Mit scipy können Sie nach dem modalen Element mit mstats.mode suchen.
das pandas
Modul könnte auch hier hilfreich sein. pandas
ist ein nettes Datenanalyse-Paket für Python und hat auch Unterstützung für dieses Problem.
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()
diese zurück
> most_frequent
2
Dies wird für jede Art arbeiten, integer oder nicht, und die Rückkehr ist immer ein numpy Array:
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])
Verwendung 'np.bincount', wenn alle Elemente sind Ganzzahlen. – nye17