# Two Dimensional Array in Python

The difference between **list** in python and **array** in python is a built-in data type in python, the data in **list** don't have to be the same, and the types in **array** must all be the same.

An example of a list:

```
a=[1,2,3,4,5] # one dimensional list
b=[[1,2,3],[0,1,2]] # two dimensional list
```

An example of an array:

```
import numpy as np
a=np.array((1,2,3,4,5))# Parameters are tuple
b=np.array([6,7,8,9,0])# Parameters are list
```

Creation of a **two dimensional array**

```
c=np.array([[1,2,3],[4,5,6]]) # Parameters two-dimensional array
```

To output arrays:

```
print(a,b, c.shape())
```

**Related course:** Complete Python Programming Course & Exercises

## Arrays must have same data type

Data types were not used in the creation of arrays earlier, but here we can also use data types. The default is int32.

```
a1=np.array([[1,2,3],[4,5,6]],dtype=np.float64)
print a1.dtype,a.dtype #float64 int32
```

Previously in the creation of the time we are using the np.array() method from the tuple or list conversion to array, feel very laborious, numpy himself provides a lot of methods for us to create an array directly.

```
arr1=np.array(1,10,1) #
arr2=np.linspace(1,10,10)
print arr1,arr1.dtype
print arr2,arr2.dtype
```

# Array index

You can access array elements (and list elements) like the examples below:

```
arr[5] #5
arr[3:5] #array([3, 4])
arr[:5] #array([0, 1, 2, 3, 4])
arr[:-1]# array([0, 1, 2, 3, 4, 5, 6, 7, 8])
arr[:] #array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[2:4]=100 # array([ 0, 1, 100, 100, 4, 5, 6, 7, 8, 9])
arr[1:-1:2] #array([ 1, 100, 5, 7]) 2 is interval
arr[::-1] #array([ 9, 8, 7, 6, 5, 4, 100, 100, 1, 0])
arr[5:2:-1]# -1 interval means right to left so 5>2 #array([ 5, 4, 100])
```

Above is how ARRAY's one-dimensional array is accessed, let's look at how the two-dimensional is handled again

```
print c[1:2]# c[1:2].shape-->(1L, 3L)
print c[1:2][0] # shape -->(3L,)
print c[1]
print c[1:2]
print c[1][2]
print c[1:4]
print c[1:4][0][2]
```

## List Index

List indexes can be arrays and lists. the returned data does not share memory with the original data. The index can be list and array.

```
x=np.array(10)
index=[1,2,3,4,5]
arr_index=np.array(index)
print x
print x[index] # list index
print x[arr_index] # array index
```

Outputs:

```
[0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
[1 2 3 4 5]
```

## Difference between array and list

The example below shows how lists an arrays can behave differently

```
a=np.change(10)
lista=list(a)
print a*2
print lista*2
```

Outputs:

```
[0 2 4 6 8 10 12 14 16 18]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
```