Python : Find unique values in a numpy array with frequency & indices | numpy.unique()

In this article we will discuss how to find unique values / rows / columns in a 1D & 2D Numpy array. Also how to find their index position & frequency count using numpy.unique().

numpy.unique()

Python’s numpy module provides a function to find the unique elements in a numpy array i.e.

numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None)

Arguments

  • arr : Numpy array in which we want to find the unique values.
  • return_index : optional bool flag. If True returns an array of indices of first occurrence of each unique value.
  • return_counts : optional bool flag. If True returns an array of occurrence count of each unique value.
  • axis : If not provided then will act on flattened array. If 0 or 1 then acts on row or column wise.

It returns either one numpy array of unique values or based on arguments can also return a tuple of arrays.
Let’s understand by some examples,

Find Unique Values from a Numpy Array

To find the unique values in this array pass the complete array to numpy.unique(). It will return an array of unique values i.e.

# Get unique values in a numpy array
arr = numpy.array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 11, 14, 18])
print('Original Numpy Array : ' , arr)

# Get unique values from a numpy array
uniqueValues = numpy.unique(arr)

print('Unique Values : ',uniqueValues)

Output:
Original Numpy Array :  [11 11 12 13 14 15 16 17 12 13 11 14 18]
Unique Values :  [11 12 13 14 15 16 17 18]

Here we passed only one argument in the numpy.unique(). Therefore it returned only an array of unique values.
Let’s explore other arguments,

Advertisements

Find Unique Values & their first index position from a Numpy Array

To get the indices of unique values in numpy array, pass the return_index argument in numpy.unique(), along with array i.e.

arr = numpy.array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 11, 14, 18])
print('Original Numpy Array : ' , arr)

# Get a tuple of unique values & their first index location from a numpy array
uniqueValues, indicesList = numpy.unique(arr, return_index=True)

print('Unique Values : ', uniqueValues)
print('Indices of Unique Values : ', indicesList)

Output:
Original Numpy Array :  [11 11 12 13 14 15 16 17 12 13 11 14 18]
Unique Values :  [11 12 13 14 15 16 17 18]
Indices of Unique Values :  [ 0  2  3  4  5  6  7 12]

It returns a tuple of 2 arrays i.e.

  • Array of unique values
  • Array of first index position of unique values in first array

Now just zipped the contents of both array to get a combination of unique value and it’s index position i.e.

# Zip both the arrays
listOfUniqueValues = zip(uniqueValues, indicesList)
print('Unique values and their first index :')
# Iterate over the zip object
for elem in listOfUniqueValues:
   print(elem[0], ' at Index : ', elem[1])


Output:
Unique values and their first index :
11  at Index :  0
12  at Index :  2
13  at Index :  3
14  at Index :  4
15  at Index :  5
16  at Index :  6
17  at Index :  7
18  at Index :  12

Get Unique Values & their frequency count from a Numpy Array

To get the frequency count of unique values in numpy array, pass the return_counts argument in numpy.unique(), along with array i.e.

arr = numpy.array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 11, 14, 18])
print('Original Numpy Array : ' , arr)

# Get a tuple of unique values & their frequency in numpy array
uniqueValues, occurCount = numpy.unique(arr, return_counts=True)

print("Unique Values : " , uniqueValues)
print("Occurrence Count : ", occurCount)

Output:
Original Numpy Array :  [11 11 12 13 14 15 16 17 12 13 11 14 18]
Unique Values :  [11 12 13 14 15 16 17 18]
Occurrence Count :  [3 2 2 2 1 1 1 1]

It returns a tuple of 2 arrays i.e.

  • Array of unique values
  • Array of frequency count of unique values in first array

Now just zipped the contents of both array to get a combination of unique value and their frequency count i.e.

# Zip both the arrays
listOfUniqueValues = zip(uniqueValues, occurCount)

print('Unique Values along with occurrence Count')
# Iterate over the zip object
for elem in listOfUniqueValues:
   print(elem[0] , ' Occurs : ' , elem[1], ' times')

Output:
Unique Values along with occurrence Count
11  Occurs :  3  times
12  Occurs :  2  times
13  Occurs :  2  times
14  Occurs :  2  times
15  Occurs :  1  times
16  Occurs :  1  times
17  Occurs :  1  times
18  Occurs :  1  times

Get Unique Values , frequency count & index position from a Numpy Array

We can also pass all the arguments together i.e.

# Get unique values, thier frequnecy count & first index position
uniqueValues , indicesList, occurCount= numpy.unique(arr, return_index=True, return_counts=True)

# Zip the contents
listOfUniqueValues = zip(uniqueValues, occurCount, indicesList)

# Iterate over the ziiped object and display each unique value along
# with frequency count & first index position
for elem in listOfUniqueValues:
   print(elem[0], ' Occurs : ', elem[1], ' times & first index is ', elem[2])

Output:
11  Occurs :  3  times & first index is  0
12  Occurs :  2  times & first index is  2
13  Occurs :  2  times & first index is  3
14  Occurs :  2  times & first index is  4
15  Occurs :  1  times & first index is  5
16  Occurs :  1  times & first index is  6
17  Occurs :  1  times & first index is  7
18  Occurs :  1  times & first index is  12

Find unique values, rows & columns in a 2D numpy array

We can also pass a 2D numpy array to numpy.unique() to get the unique values i.e.

# Create a 2D numpy array
arr2D = numpy.array([[11, 11, 12,11] ,[ 13, 11, 12,11] , [ 16, 11, 12, 11],  [11, 11, 12, 11]])

print('Original Array :' , arr2D, sep='\n')

# Get unique values from complete 2D array
uniqueValues = numpy.unique(arr2D)

print('Unique Values : ', uniqueValues)

Output:
Original Array :
[[11 11 12 11]
 [13 11 12 11]
 [16 11 12 11]
 [11 11 12 11]]
Unique Values :  [11 12 13 16]

If axis argument is not passed, 2D array will be flattened and used. To get the unique rows or columns pass axis argument i.e.

Get unique Rows :

# Get unique rows from complete 2D numpy array
uniqueRows = numpy.unique(arr2D, axis=0)

print('Unique Rows : ', uniqueRows, sep='\n')

Output:
Unique Rows : 
[[11 11 12 11]
 [13 11 12 11]
 [16 11 12 11]]

Get unique Columns :

# Get unique columns from  2D numpy array
uniqueColumns = numpy.unique(arr2D, axis=1)

print('Unique Columns : ', uniqueColumns, sep='\n')

Output:
Unique Columns : 
[[11 11 12]
 [11 13 12]
 [11 16 12]
 [11 11 12]]

Get unique Columns & index position :

# Get unique columns  & occurrence count from a 2D numpy array
uniqueColumns, occurCount = numpy.unique(arr2D, axis=1, return_counts=True)

print('Unique Columns : ', uniqueColumns, sep='\n')
print('Unique Columns Occurrence : ', occurCount, sep='\n')

Output:
Unique Columns : 
[[11 11 12]
 [11 13 12]
 [11 16 12]
 [11 11 12]]
Unique Columns Occurrence : 
[2 1 1]

Complete example is as follows,
import numpy as numpy

def main():


    print('*** Find Unique Values from a Numpy Array ***')

    arr = numpy.array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 11, 14, 18])

    print('Original Numpy Array : ' , arr)

    # Get unique values from a numpy array
    uniqueValues = numpy.unique(arr)

    print('Unique Values : ',uniqueValues)

    print('*** Find Unique Values & their first index position from a Numpy Array ***')

    arr = numpy.array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 11, 14, 18])
    print('Original Numpy Array : ' , arr)

    # Get a tuple of unique values & their first index location from a numpy array
    uniqueValues, indicesList = numpy.unique(arr, return_index=True)

    print('Unique Values : ', uniqueValues)
    print('Indices of Unique Values : ', indicesList)

    # Zip both the arrays
    listOfUniqueValues = zip(uniqueValues, indicesList)
    print('Unique values and their first index :')
    # Iterate over the zip object
    for elem in listOfUniqueValues:
       print(elem[0], ' at Index : ', elem[1])


    print('*** Get the occurrence count of each unique values in Numpy Array ***')

    arr = numpy.array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 11, 14, 18])
    print('Original Numpy Array : ' , arr)

    # Get a tuple of unique values & their frequency in numpy array
    uniqueValues, occurCount = numpy.unique(arr, return_counts=True)

    print("Unique Values : " , uniqueValues)
    print("Occurrence Count : ", occurCount)

    # Zip both the arrays
    listOfUniqueValues = zip(uniqueValues, occurCount)

    print('Unique Values along with occurrence Count')
    # Iterate over the zip object
    for elem in listOfUniqueValues:
       print(elem[0] , ' Occurs : ' , elem[1], ' times')


    print('*** Get the first index & occurrence count of each unique values in Numpy Array ***')

    arr = numpy.array([11, 11, 12, 13, 14, 15, 16, 17, 12, 13, 11, 14, 18])
    print('Original Numpy Array : ' , arr)

    # Get unique values, thier frequnecy count & first index position
    uniqueValues , indicesList, occurCount= numpy.unique(arr, return_index=True, return_counts=True)

    # Zip the contents
    listOfUniqueValues = zip(uniqueValues, occurCount, indicesList)

    # Iterate over the ziiped object and display each unique value along
    # with frequency count & first index position
    for elem in listOfUniqueValues:
       print(elem[0], ' Occurs : ', elem[1], ' times & first index is ', elem[2])

    print('*** Find unique values in 2D Numpy Array ***')

    # Create a 2D numpy array
    arr2D = numpy.array([[11, 11, 12,11] ,[ 13, 11, 12,11] , [ 16, 11, 12, 11],  [11, 11, 12, 11]])

    print('Original Array :' , arr2D, sep='\n')

    # Get unique values from complete 2D array
    uniqueValues = numpy.unique(arr2D)

    print('Unique Values : ', uniqueValues)

    # Get unique rows from complete 2D numpy array
    uniqueRows = numpy.unique(arr2D, axis=0)

    print('Unique Rows : ', uniqueRows, sep='\n')

    # Get unique columns from  2D numpy array
    uniqueColumns = numpy.unique(arr2D, axis=1)

    print('Unique Columns : ', uniqueColumns, sep='\n')

    # Get unique columns  & occurrence count from a 2D numpy array
    uniqueColumns, occurCount = numpy.unique(arr2D, axis=1, return_counts=True)

    print('Unique Columns : ', uniqueColumns, sep='\n')
    print('Unique Columns Occurrence : ', occurCount, sep='\n')


if __name__ == '__main__':
   main()


Output:
*** Find Unique Values from a Numpy Array ***
Original Numpy Array :  [11 11 12 13 14 15 16 17 12 13 11 14 18]
Unique Values :  [11 12 13 14 15 16 17 18]
*** Find Unique Values & their first index position from a Numpy Array ***
Original Numpy Array :  [11 11 12 13 14 15 16 17 12 13 11 14 18]
Unique Values :  [11 12 13 14 15 16 17 18]
Indices of Unique Values :  [ 0  2  3  4  5  6  7 12]
Unique values and their first index :
11  at Index :  0
12  at Index :  2
13  at Index :  3
14  at Index :  4
15  at Index :  5
16  at Index :  6
17  at Index :  7
18  at Index :  12
*** Get the occurrence count of each unique values in Numpy Array ***
Original Numpy Array :  [11 11 12 13 14 15 16 17 12 13 11 14 18]
Unique Values :  [11 12 13 14 15 16 17 18]
Occurrence Count :  [3 2 2 2 1 1 1 1]
Unique Values along with occurrence Count
11  Occurs :  3  times
12  Occurs :  2  times
13  Occurs :  2  times
14  Occurs :  2  times
15  Occurs :  1  times
16  Occurs :  1  times
17  Occurs :  1  times
18  Occurs :  1  times
*** Get the first index & occurrence count of each unique values in Numpy Array ***
Original Numpy Array :  [11 11 12 13 14 15 16 17 12 13 11 14 18]
11  Occurs :  3  times & first index is  0
12  Occurs :  2  times & first index is  2
13  Occurs :  2  times & first index is  3
14  Occurs :  2  times & first index is  4
15  Occurs :  1  times & first index is  5
16  Occurs :  1  times & first index is  6
17  Occurs :  1  times & first index is  7
18  Occurs :  1  times & first index is  12
*** Find unique values in 2D Numpy Array ***
Original Array :
[[11 11 12 11]
 [13 11 12 11]
 [16 11 12 11]
 [11 11 12 11]]
Unique Values :  [11 12 13 16]
Unique Rows : 
[[11 11 12 11]
 [13 11 12 11]
 [16 11 12 11]]
Unique Columns : 
[[11 11 12]
 [11 13 12]
 [11 16 12]
 [11 11 12]]
Unique Columns : 
[[11 11 12]
 [11 13 12]
 [11 16 12]
 [11 11 12]]
Unique Columns Occurrence : 
[2 1 1]

 

Pandas Tutorials -Learn Data Analysis with Python

   

Are you looking to make a career in Data Science with Python?

Data Science is the future, and the future is here now. Data Scientists are now the most sought-after professionals today. To become a good Data Scientist or to make a career switch in Data Science one must possess the right skill set. We have curated a list of Best Professional Certificate in Data Science with Python. These courses will teach you the programming tools for Data Science like Pandas, NumPy, Matplotlib, Seaborn and how to use these libraries to implement Machine learning models.

Checkout the Detailed Review of Best Professional Certificate in Data Science with Python.

Remember, Data Science requires a lot of patience, persistence, and practice. So, start learning today.

Join a LinkedIn Community of Python Developers

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top