NumPy is a Python library for working with multidimensional arrays. The main data type is an array. An array is a set of elements, all of the same type, indexed by a vector of nonnegative integers.

Arrays can be created in different ways:

`>>> from numpy import *>>> a = array( [ 10, 20, 30, 40 ] )  # create an array out of a list>>> aarray([10, 20, 30, 40])>>> b = arange( 4 )          # create an array of 4 integers, from 0 to 3>>> barray([0, 1, 2, 3])>>> c = linspace(-pi,pi,3)      # create an array of 3 evenly spaced samples from -pi to pi>>> carray([-3.14159265, 0.    , 3.14159265])`

New arrays can be obtained by operating with existing arrays:

`>>> d = a+b**2            # elementwise operations>>> darray([10, 21, 34, 49])`

Arrays may have more than one dimension:

`>>> x = ones( (3,4) )>>> xarray([[1., 1., 1., 1.],    [1., 1., 1., 1.],    [1., 1., 1., 1.]])>>> x.shape              # a tuple with the dimensions(3, 4)`

and you can change the dimensions of existing arrays:

`>>> y = arange(12)>>> yarray([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])>>> y.shape = 3,4       # does not modify the total number of elements>>> yarray([[ 0, 1, 2, 3],    [ 4, 5, 6, 7],    [ 8, 9, 10, 11]])`

It is possible to operate with arrays of different dimensions as long as they fit well (broadcasting).

`>>> 3*a                # multiply each element of a by 3array([ 30, 60, 90, 120])>>> a+y                # sum a to each row of yarray([[10, 21, 32, 43],    [14, 25, 36, 47],    [18, 29, 40, 51]])`

Similar to Python lists, arrays can be indexed, sliced and iterated over.

`>>> a[2:4] = -7,-3           # modify last two elements of a>>> for i in a:            # iterate over a...   print i...1020-7-3`

When indexing more than one dimension, indices are separated by commas.

`>>> x[1,2] = 20>>> x[1,:]               # x's second rowarray([ 1, 1, 20, 1])>>> x[0] = a              # change first row of x>>> xarray([[10, 20, -7, -3],    [ 1, 1, 20, 1],    [ 1, 1, 1, 1]])`