简体   繁体   中英

how to find most frequent string element in numpy ndarray?

Is their any way to find most frequent string element in numpy ndarray?

A= numpy.array(['a','b','c']['d','d','e']])


result should be 'd'

If you want a numpy answer you can use np.unique :

>>> unique,pos = np.unique(A,return_inverse=True) #Finds all unique elements and their positions
>>> counts = np.bincount(pos)                     #Count the number of each unique element
>>> maxpos = counts.argmax()                      #Finds the positions of the maximum count

>>> (unique[maxpos],counts[maxpos])
('d', 2)

Although if there are two elements with equal counts this will simply take the first from the unique array.

With this you can also easily sort by element count like so:

>>> maxsort = counts.argsort()[::-1]
>>> (unique[maxsort],counts[maxsort])
(array(['d', 'e', 'c', 'b', 'a'],
      dtype='|S1'), array([2, 1, 1, 1, 1]))

Here is one way:

>>> import numpy
>>> from collections import Counter
>>> A = numpy.array([['a','b','c'],['d','d','e']])
>>> Counter(A.flat).most_common(1)
[('d', 2)]

Extracting the 'd' is left as an exercise for the reader.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM