8

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'

2 Answers 2

13

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]))
Sign up to request clarification or add additional context in comments.

Comments

3

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.

2 Comments

how to get at the desired dimension with out using .flat?@NPE
@nils: Not sure I understand your question. You feed an array of any shape and dimensions, and get back a scalar.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.