# 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,

## 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]```

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

Scroll to Top