## where() method

Numpy array can be easily searched using where() method. This method returns all the index positions that pose a match.

```import numpy as np

nums=np.array([16,11,22,12,16,42,17,55,12,12])
results=np.where(nums==12)
print(results)

#Output
(array([3, 8, 9]),)
```
This method returns a tuple, representing the indexes containing the value equal to 12.

Even, we can perform complex searches such as,

```import numpy as np

nums=np.array([16,11,22,12,16,42,17,55,12,12])
results=np.where(nums>20) #binary condition
print(results)

#Output
(array([2, 5, 7]),)
```
OR

```import numpy as np

nums=np.array([16,11,22,12,16,42,17,55,12,12])
results=np.where(nums%2==0) #binary condition
print(results) #Even numbers

#Output
(array([0, 2, 3, 4, 5, 8, 9]),)
```

## searchsorted() method

This method is applied to sorted sequences, applies binary search, and returns the index position, where the item must be placed correctly to retain the sorted order.

```import numpy as np

nums=np.array([16,11,22,12,16,42,17,55,12,12])
numssorted=np.sort(nums)
results=np.searchsorted(numssorted, 21)
print(results)  #7
```

We can also search from right side of the array.

```import numpy as np

nums=np.array([16,11,22,12,16,42,17,55,12,12])
numssorted=np.sort(nums)
results=np.searchsorted(numssorted, 21, side="right")
print(results)  #7
```

We can also search for multiple values, for example

```import numpy as np

nums=np.array([16,11,22,12,16,42,17,55,12,12])
numssorted=np.sort(nums)
results=np.searchsorted(numssorted, [21, 40, 85])
print(results)

#Output
[ 7  8 10]
```
It means 21, 40, 85 can be inserted at 7,  8 , 10 positions respectively in the sorted array.