NumPy da solución, entre otras cosas, a la necesidad de operar con colecciones de valores de una forma eficiente. Así, por ejemplo, si partimos de las siguientes listas:
m = [1, 2, 3]
n = [3, 4, 5]
...no hay forma de sumar los elementos de m y n por parejas (para devolver algo como [4, 6, 8]) salvo que recurramos a bucles externos, lo que, para conjuntos de datos de cierto tamaño, resulta extremadamente ineficiente. El "operador suma" nos devuelve la concatenación de las listas, que no es lo que deseamos:
m + n
Tampoco podemos aplicar una función a cada valor de las listas salvo, nuevamente, recurriendo a bucles.
NumPy ofrece una alternativa a las listas de datos de Python: el array multidimensional (o simplemente array). Éste es semejante a la lista de Python pero permite realizar operaciones entre ellos, u operaciones entre escalares y ellos, o ejecutar ciertas operaciones sobre todos los elementos del array de forma simultánea.
a = np.array([1, 2, 3])
a
En el ejemplo anterior simplemente hemos creado un array unidimensional conteniendo los valores 1, 2, 3. Podemos aplicarle una función que eleva cada valor del array al cuadrado:
np.square(a)
O, si tenemos otro array o un escalar, podemos realizar operaciones entre ellos:
b = np.array([5, 6, 7])
a + b
a - 2
Los arrays son contenedores multidimensionales para datos homogéneos. Es decir, todos los datos contenidos en un array deberán ser del mismo tipo. Todos los arrays tiene un número de dimensiones (ndim), un tamaño (shape) que define el número de elementos en cada dimensión del array, y un tipo (dtype) que describe el tipo de los datos contenidos en el array.