It is possible to make a selection from ndarray that is a non-tuple sequence, ndarray object of integer or Boolean data type, or a tuple with at least one item being a sequence object. Advanced indexing always returns a copy of the data. As against this, the slicing only presents a view.

There are two types of **Advanced Indexing** − **Integer and Boolean**.

**Integer Indexing**
This mechanism helps in selecting any arbitrary item in an array based on its Ndimensional index. Each integer array represents the number of indexes into that dimension. When the index consists of as many integer arrays as the dimensions of the target ndarray, it becomes straightforward.

In the following example, one element of specified column from each row of ndarray object is selected. Hence, the row index contains all row numbers, and the column index specifies the element to be selected.

In [2]:

```
import numpy as np
x = np.array([[1, 2], [3, 4], [5, 6]])
y = x[[0,1,2], [0,1,0]]
print (y)
```

In [5]:

```
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print ('Our array is:')
print (x)
print ('\n')
rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]])
y = (x[rows,cols])
print ('The corner elements of this array are:')
print (y)
```

In [7]:

```
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print ('Our array is:')
print (x)
print ('\n')
# slicing
z = x[1:4,1:3]
print ('After slicing, our array becomes:')
print (z)
print ('\n')
# using advanced index for column
y = x[1:4,[1,2]]
print ('Slicing using advanced index for column:')
print (y)
```

This type of advanced indexing is used when the resultant object is meant to be the result of Boolean operations, such as comparison operators.

In [8]:

```
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print ('Our array is:')
print (x)
print ('\n')
# Now we will print the items greater than 5
print ('The items greater than 5 are:')
print (x[x > 5])
```

In [9]:

```
import numpy as np
a = np.array([np.nan, 1,2,np.nan,3,4,5])
print (a[~np.isnan(a)])
```

In [10]:

```
import numpy as np
a = np.array([1, 2+6j, 5, 3.5+5j])
print (a[np.iscomplex(a)])
```

Dolly Solanki