Numpy Es
Numpy Es
#numpy
Tabla de contenido
Acerca de 1
Observaciones 2
Versiones 2
Examples 3
Instalación en Mac 3
Instalación en Windows 3
Instalación en Linux 4
Importación básica 4
Introducción 6
Examples 6
Observaciones 7
Examples 7
Examples 10
Capítulo 5: Arrays 13
Introducción 13
Observaciones 13
Examples 13
Acceso a Array 16
Indexación booleana 18
Examples 24
Introducción 26
Examples 26
Poniendo la semilla 26
Examples 29
Capítulo 9: numpy.cross 30
Sintaxis 30
Parámetros 30
Examples 30
Parámetros 34
Observaciones 34
Examples 34
Multiplicación de matrices 34
El parametro de salida 35
Introducción 38
Examples 38
Utilizando np.polyfit 38
Usando np.linalg.lstsq 38
Sintaxis 40
Examples 40
Creditos 42
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: numpy
It is an unofficial and free numpy ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official numpy.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/es/home 1
Capítulo 1: Empezando con numpy
Observaciones
NumPy (pronunciado "numb pie" o, a veces, "numb pea") es una extensión del lenguaje de
programación Python que agrega soporte para matrices grandes y multidimensionales, junto con
una amplia biblioteca de funciones matemáticas de alto nivel para operar en estas matrices.
Versiones
1.3.0 2009-03-20
1.4.0 2010-07-21
1.5.0 2010-11-18
1.6.0 2011-05-15
1.6.1 2011-07-24
1.6.2 2012-05-20
1.7.0 2013-02-12
1.7.1 2013-04-07
1.7.2 2013-12-31
1.8.0 2013-11-10
1.8.1 2014-03-26
1.8.2 2014-08-09
1.9.0 2014-09-07
1.9.1 2014-11-02
1.9.2 2015-03-01
1.10.0 2015-10-07
1.10.1 2015-10-12
1.10.2 2015-12-14
https://riptutorial.com/es/home 2
Versión Fecha de lanzamiento
1.10.4 * 2016-01-07
1.11.0 2016-05-29
Examples
Instalación en Mac
1. Instale Conda. Hay dos formas de instalar Conda, ya sea con Anaconda (paquete completo,
incluye numpy) o Miniconda (solo Conda, Python y los paquetes de los que dependen, sin
ningún paquete adicional). Tanto Anaconda como Miniconda instalan la misma Conda.
2. Comando adicional para Miniconda, escriba el comando conda install numpy
Instalación en Windows
En general, la instalación a través de pypi (el índice de paquete predeterminado usado por pip)
generalmente falla en las computadoras con Windows. La forma más fácil de instalar en Windows
es mediante el uso de archivos binarios precompilados.
Una fuente de ruedas precompiladas de muchos paquetes es el sitio de Christopher Gohkle . Elija
una versión de acuerdo con su versión y sistema de Python. Un ejemplo para Python 3.5 en un
sistema de 64 bits:
Si no quiere perder el tiempo con paquetes individuales, puede usar la distribución Winpython que
agrupa a la mayoría de los paquetes y proporciona un entorno limitado para trabajar. De manera
similar, la distrubución de Anaconda Python viene preinstalada con muchos y otros paquetes
comunes.
Otra fuente popular es el conda paquetes conda , que también es compatible con entornos virtuales
.
https://riptutorial.com/es/home 3
Instalación en Linux
NumPy está disponible en los repositorios predeterminados de las distribuciones de Linux más
populares y se puede instalar de la misma manera que los paquetes en una distribución de Linux
generalmente se instalan.
Algunas distribuciones de Linux tienen diferentes paquetes NumPy para Python 2.xy Python 3.x.
En Ubuntu y Debian, instale numpy en el nivel del sistema usando el administrador de paquetes
APT:
Para otras distribuciones, use sus administradores de paquetes, como zypper (Suse), yum
(Fedora), etc.
numpytambién se puede instalar con el gestor de paquetes de Python pip para Python 2 y con pip3
para Python 3:
Después de la instalación, use pip para Python 2 y pip3 para Python 3 para usar pip para instalar
paquetes de Python. Pero tenga en cuenta que es posible que necesite instalar muchas
dependencias, que son necesarias para compilar numpy desde la fuente (incluidos los paquetes
de desarrollo, compiladores, fortran, etc.).
Además de instalar numpy en el nivel del sistema, también es común (quizás incluso muy
recomendable) instalar numpy en entornos virtuales utilizando paquetes populares de Python como
virtualenv . En Ubuntu, virtualenv se puede instalar usando:
Luego, crea y activa un virtualenv para Python 2 o Python 3 y luego usa pip para instalar numpy :
Importación básica
https://riptutorial.com/es/home 4
Importe el módulo numpy para usar cualquier parte de él.
import numpy as np
La mayoría de los ejemplos usarán np como abreviatura para numpy. Suponga que "np" significa
"numpy" en los ejemplos de código.
x = np.array([1,2,3,4])
Los portátiles Jupyter son un entorno de desarrollo interactivo y basado en navegador. Fueron
desarrollados originalmente para ejecutar la computación python y, como tal, juegan muy bien con
numpy. Para probar el numpy en una computadora portátil Jupyter sin instalar completamente
ninguno de los sistemas locales, Rackspace proporciona computadoras portátiles temporales
gratuitas en tmpnb.org .
Nota: este no es un servicio propietario con ningún tipo de ventas adicionales. Jupyter es una
tecnología totalmente de código abierto desarrollada por UC Berkeley y Cal Poly San Luis Obispo.
Rackspace dona este servicio como parte del proceso de desarrollo.
1. visita tmpnb.org
2. seleccione Welcome to Python.ipynb o
3. Nuevo >> Python 2 o
4. Nuevo >> Python 3
https://riptutorial.com/es/home 5
Capítulo 2: Ahorro y carga de matrices
Introducción
Las matrices numpy se pueden guardar y cargar de varias maneras.
Examples
Usando numpy.save y numpy.load
np.save y np.load proporcionan un marco fácil de usar para guardar y cargar arrays de números
de tamaño arbitrario:
import numpy as np
a = np.random.randint(10,size=(3,3))
np.save('arr', a)
a2 = np.load('arr.npy')
print a2
https://riptutorial.com/es/home 6
Capítulo 3: Álgebra lineal con np.linalg
Observaciones
A partir de la versión 1.8, varias de las rutinas en np.linalg pueden operar en una 'pila' de
matrices. Es decir, la rutina puede calcular resultados para matrices múltiples si se apilan juntas.
Por ejemplo, A aquí se interpreta como dos matrices apiladas de 3 por 3:
np.random.seed(123)
A = np.random.rand(2,3,3)
b = np.random.rand(2,3)
x = np.linalg.solve(A, b)
print b[0,:]
# array([ 0.53155137, 0.53182759, 0.63440096])
Examples
Resolver sistemas lineales con np.solve.
x0 + 2 * x1 + x2 = 4
x1 + x2 = 3
x0 + x2 = 5
A = np.array([[1, 2, 1],
[0, 1, 1],
[1, 0, 1]])
b = np.array([4, 3, 5])
x = np.linalg.solve(A, b)
# Out: x = array([ 1.5, -0.5, 3.5])
A debe ser una matriz cuadrada y de rango completo: todas sus filas deben ser linealmente
independientes. A debe ser invertible / no singular (su determinante no es cero). Por ejemplo, si
una fila de A es un múltiplo de otra, llamar a linalg.solve generará LinAlgError: Singular matrix :
https://riptutorial.com/es/home 7
A = np.array([[1, 2, 1],
[2, 4, 2], # Note that this row 2 * the first row
[1, 0, 1]])
b = np.array([4,8,5])
Los cuadrados mínimos es un enfoque estándar para problemas con más ecuaciones que
incógnitas, también conocidas como sistemas sobredeterminados.
x0 + 2 * x1 + x2 = 4
x0 + x1 + 2 * x2 = 3
2 * x0 + x1 + x2 = 5
x0 + x1 + x2 = 4
A = np.array([[1, 2, 1],
[1,1,2],
[2,1,1],
[1,1,1]])
b = np.array([4,3,5,4])
A = np.array([[1, 2, 1],
[1,1,2],
[2,1,1],
[1,1,1]])
b = np.array([[4,3,5,4],[1,2,3,4]]).T # transpose to align dimensions
x, residuals, rank, s = np.linalg.lstsq(A,b)
print x # columns of x are solutions corresponding to columns of b
#[[ 2.05263158 1.63157895]
# [ 1.05263158 -0.36842105]
# [ 0.05263158 0.63157895]]
print residuals # also one for each column in b
#[ 0.84210526 5.26315789]
rank y s solo dependen de A , y por lo tanto son los mismos que los anteriores.
https://riptutorial.com/es/home 8
lineal-con-np-linalg
https://riptutorial.com/es/home 9
Capítulo 4: Archivo IO con numpy
Examples
Guardando y cargando matrices numpy usando archivos binarios
x = np.random.random([100,100])
x.tofile('/path/to/dir/saved_binary.npy')
y = fromfile('/path/to/dir/saved_binary.npy')
z = y.reshape(100,100)
all(x==z)
# Output:
# True
# File:
# # Col_1 Col_2
# 1, 1
# 2, 4
# 3, 9
np.loadtxt('/path/to/dir/csvlike.txt', delimiter=',', comments='#')
# Output:
# array([[ 1., 1.],
# [ 2., 4.],
# [ 3., 9.]])
El mismo archivo podría leerse usando una expresión regular con np.fromregex :
De forma np.loadtxt a np.loadtxt , np.savetxt se puede usar para guardar datos en un archivo
ASCII
import numpy as np
x = np.random.random([100,100])
np.savetxt("filename.txt", x)
https://riptutorial.com/es/home 10
newline="\n", comments="$ ", fmt="%1.2f",
header="commented example text")
Salida:
fromfile: una forma altamente eficiente de leer datos binarios con un tipo de datos
conocido, así como analizar archivos de texto con formato simple. Los datos escritos
usando el método tofile se pueden leer usando esta función.
genfromtxt : carga datos de un archivo de texto, con los valores faltantes manejados
como se especifica. Cada línea después de las primeras líneas skip_header se divide
en el carácter delimitador y los caracteres que siguen al carácter de comentarios se
descartan.
loadtxt : carga los datos de un archivo de texto. Cada fila en el archivo de texto debe
tener el mismo número de valores.
genfromtxtes una función de envoltorio para loadtxt . genfromtxt es el más sencillo de usar, ya
que tiene muchos parámetros para manejar el archivo de entrada.
import numpy as np
np.genfromtxt('path/to/myfile.csv',delimiter=',',skiprows=1)
da una matriz:
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
1 2.0000 buckle_my_shoe
3 4.0000 margery_door
import numpy as np
np.genfromtxt('filename', dtype= None)
https://riptutorial.com/es/home 11
array([(1, 2.0, 'buckle_my_shoe'), (3, 4.0, 'margery_door')],
dtype=[('f0', '<i4'), ('f1', '<f8'), ('f2', '|S14')])
archivo: 1 2 3 4 5 6 7 8 9 10 11 22 13 14 15 16 17 18 19 20 21 22 23 24
result=np.fromfile(path_to_file,dtype=float,sep="\t",count=-1)
https://riptutorial.com/es/home 12
Capítulo 5: Arrays
Introducción
Las matrices de N-dimensional o ndarrays son el objeto central de numpy utilizado para almacenar
elementos del mismo tipo de datos. Proporcionan una estructura de datos eficiente que es
superior a las matrices comunes de Python.
Observaciones
Siempre que sea posible, exprese operaciones sobre datos en términos de matrices y
operaciones vectoriales. Las operaciones vectoriales se ejecutan mucho más rápido que el
equivalente para los bucles.
Examples
Crear una matriz
Matriz vacía
np.empty((2,3))
Tenga en cuenta que, en este caso, los valores de esta matriz no están establecidos. Esta forma
de crear una matriz, por lo tanto, solo es útil si la matriz se llena más adelante en el código.
De una lista
np.array([0,1,2,3])
# Out: array([0, 1, 2, 3])
Crear un rango
np.arange(4)
# Out: array([0, 1, 2, 3])
Crear ceros
np.zeros((3,2))
# Out:
# array([[ 0., 0.],
# [ 0., 0.],
# [ 0., 0.]])
Crear unos
https://riptutorial.com/es/home 13
np.ones((3,2))
# Out:
# array([[ 1., 1.],
# [ 1., 1.],
# [ 1., 1.]])
np.linspace(0,1,21)
# Out:
# array([ 0. , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 ,
# 0.45, 0.5 , 0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85,
# 0.9 , 0.95, 1. ])
np.logspace(-2,2,5)
# Out:
# array([ 1.00000000e-02, 1.00000000e-01, 1.00000000e+00,
# 1.00000000e+01, 1.00000000e+02])
Operadores de matrices
x = np.arange(4)
x
#Out:array([0, 1, 2, 3])
x+10
#Out: array([10, 11, 12, 13])
x*2
#Out: array([0, 2, 4, 6])
x+x
https://riptutorial.com/es/home 14
#Out: array([0, 2, 4, 6])
x*x
#Out: array([0, 1, 4, 9])
x.dot(x)
#Out: 14
En Python 3.5, el operador @ se agregó como operador de infijo para la multiplicación de matrices
x = np.diag(np.arange(4))
print(x)
'''
Out: array([[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 2, 0],
[0, 0, 0, 3]])
'''
print(x@x)
print(x)
'''
Out: array([[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 4, 0],
[0, 0, 0, 9]])
'''
# np.hstack(tup), np.vstack(tup)
x = np.array([0,0,0])
y = np.array([1,1,1])
z = np.array([2,2,2])
np.hstack(x,y,z)
# Out: array([0, 0, 0, 1, 1, 1, 2, 2, 2])
np.vstack(x,y,z)
https://riptutorial.com/es/home 15
# Out: array([[0, 0, 0],
# [1, 1, 1],
# [2, 2, 2]])
Acceso a Array
x = np.arange(10)
x[0]
# Out: 0
x[0:4]
# Out: array([0, 1, 2, 3])
x[0:4:2]
# Out:array([0, 2])
Los valores negativos cuentan desde el final de la matriz. -1 por lo tanto accede al último
elemento en una matriz:
x[-1]
# Out: 9
x[-1:0:-1]
# Out: array([9, 8, 7, 6, 5, 4, 3, 2, 1])
Se puede acceder a las matrices multidimensionales especificando cada dimensión separada por
comas. Se aplican todas las reglas anteriores.
x = np.arange(16).reshape((4,4))
x
# Out:
# array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11],
# [12, 13, 14, 15]])
x[1,1]
# Out: 5
x[0:3,0]
# Out: array([0, 4, 8])
x[0:3, 0:3]
# Out:
# array([[ 0, 1, 2],
# [ 4, 5, 6],
# [ 8, 9, 10]])
x[0:3:2, 0:3:2]
# Out:
# array([[ 0, 2],
# [ 8, 10]])
https://riptutorial.com/es/home 16
Transponiendo una matriz
arr = np.arange(10).reshape(2, 5)
arr.transpose()
# Out:
# array([[0, 5],
# [1, 6],
# [2, 7],
# [3, 8],
# [4, 9]])
.T método:
arr.T
# Out:
# array([[0, 5],
# [1, 6],
# [2, 7],
# [3, 8],
# [4, 9]])
O np.transpose :
np.transpose(arr)
# Out:
# array([[0, 5],
# [1, 6],
# [2, 7],
# [3, 8],
# [4, 9]])
a = np.arange(12).reshape((3,2,2))
a.transpose() # equivalent to a.transpose(2,1,0)
# Out:
# array([[[ 0, 4, 8],
# [ 2, 6, 10]],
#
# [[ 1, 5, 9],
# [ 3, 7, 11]]])
a.transpose(2,0,1)
# Out:
# array([[[ 0, 2],
# [ 4, 6],
https://riptutorial.com/es/home 17
# [ 8, 10]],
#
# [[ 1, 3],
# [ 5, 7],
# [ 9, 11]]])
Indexación booleana
arr = np.arange(7)
print(arr)
# Out: array([0, 1, 2, 3, 4, 5, 6])
arr > 4
# Out: array([False, False, False, False, False, True, True], dtype=bool)
Esta matriz se puede usar en la indexación para seleccionar solo los números mayores de 4:
arr[arr>4]
# Out: array([5, 6])
La indexación booleana se puede utilizar entre diferentes matrices (por ejemplo, matrices
paralelas relacionadas):
El numpy.reshape (igual que numpy.ndarray.reshape ) devuelve una matriz del mismo tamaño total,
pero en una nueva forma:
print(np.arange(10).reshape((2, 5)))
# [[0 1 2 3 4]
# [5 6 7 8 9]]
a = np.arange(12)
https://riptutorial.com/es/home 18
a.reshape((3, 4))
print(a)
# [ 0 1 2 3 4 5 6 7 8 9 10 11]
a = np.arange(12)
a.shape = (3, 4)
print(a)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
Este comportamiento puede ser sorprendente al principio, pero los ndarray s se almacenan en
bloques contiguos de memoria, y su shape solo especifica cómo este flujo de datos debe
interpretarse como un objeto multidimensional.
Hasta un eje en la tupla de shape puede tener un valor de -1 . numpy entonces numpy la longitud de
este eje para ti:
a = np.arange(12)
print(a.reshape((3, -1)))
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
O:
a = np.arange(12)
print(a.reshape((3, 2, -1)))
# [[[ 0 1]
# [ 2 3]]
# [[ 4 5]
# [ 6 7]]
# [[ 8 9]
# [10 11]]]
Múltiples dimensiones no especificadas, por ejemplo, a.reshape((3, -1, -1)) no están permitidas y
lanzarán un ValueError .
https://riptutorial.com/es/home 19
a
# array([0, 1, 2],
# [3, 4, 5])
b
# array([1, 1, 1],
# [1, 1, 1])
Las operaciones aritméticas también pueden ejecutarse en matrices de diferentes formas por
medio de la difusión Numpy. En general, una matriz se "difunde" sobre la otra para que las
operaciones elementales se realicen en subarreglas de forma congruente.
Para ilustrar esto aún más, considere la multiplicación de matrices 2D y 3D con subdimensiones
congruentes.
https://riptutorial.com/es/home 20
# [[ 0, 7, 16],
# [27, 40, 55]]])
Las formas se comparan por componentes partiendo de las que se arrastran. Dos dimensiones
son compatibles si son iguales o una de ellas es 1 . Si una forma tiene una dimensión mayor que
la otra, no se comparan los componentes excedentes.
(3, 4, 5) # incompatible
(5, 5)
(3, 4, 5) # compatible
(1, 5)
filePath = "file.csv"
data = np.genfromtxt(filePath)
Se admiten muchas opciones, consulte la documentación oficial para obtener una lista completa:
https://riptutorial.com/es/home 21
positivos que especifican los tamaños de cada dimensión)
Matriz unidimensional:
x = np.arange(15)
# array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
x.shape
# (15,)
Matriz bidimensional:
Tridimensional:
np.arange(12).reshape([2,3,2])
x = np.empty([2, 2])
# array([[ 0., 0.],
# [ 0., 0.]])
x = np.empty([2, 2])
# array([[ 0., 0.],
# [ 0., 0.]])
x.dtype
# dtype('float64')
Tenga en cuenta que al realizar asignaciones numpy intentará convertir automáticamente los
valores para que se ajusten al tipo de datos del ndarray
https://riptutorial.com/es/home 22
# value has been casted to int
x[1, 1] = 'z' # value cannot be casted, resulting in a ValueError
Difusión de matriz
En terminología matricial, tendríamos una matriz 2x2 y un vector fila 1x2. Todavía somos capaces
de hacer una suma.
# x + y
array([[ 6, 8],
[ 8, 10]])
array([[5, 6],
[5, 6]])
Recursos:
https://riptutorial.com/es/home 23
Capítulo 6: Filtrando datos
Examples
Filtrado de datos con una matriz booleana
Cuando solo se proporciona un único argumento a numpy where funciona, devuelve los índices de
la matriz de entrada (la condition ) que se evalúan como verdaderas (el mismo comportamiento
que numpy.nonzero ). Esto se puede usar para extraer los índices de una matriz que satisfacen una
condición dada.
import numpy as np
a = np.arange(20).reshape(2,10)
# a = array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])
# Generate boolean array indicating which values in a are both greater than 7 and less than 13
condition = np.bitwise_and(a>7, a<13)
# condition = array([[False, False, False, False, False, False, False, False, True, True],
# [True, True, True, False, False, False, False, False, False, False]],
dtype=bool)
keep = a[ind]
# keep = [ 8 9 10 11 12]
Si no necesita los índices, esto se puede lograr en un solo paso usando extract , donde
nuevamente especifique la condition como primer argumento, pero le da a la array que devuelva
los valores desde donde la condición es verdadera como segundo argumento.
# np.extract(condition, array)
keep = np.extract(condition, a)
# keep = [ 8 9 10 11 12]
# Set elements of a which are NOT greater than 7 and less than 13 to zero, np.where(condition,
x, y)
a = np.where(condition, a, a*0)
print(a)
# Out: array([[ 0, 0, 0, 0, 0, 0, 0, 0, 8, 9],
# [10, 11, 12, 0, 0, 0, 0, 0, 0, 0]])
https://riptutorial.com/es/home 24
Para casos simples, puede filtrar datos directamente.
a = np.random.normal(size=10)
print(a)
#[-1.19423121 1.10481873 0.26332982 -0.53300387 -0.04809928 1.77107775
# 1.16741359 0.17699948 -0.06342169 -1.74213078]
b = a[a>0]
print(b)
#[ 1.10481873 0.26332982 1.77107775 1.16741359 0.17699948]
https://riptutorial.com/es/home 25
Capítulo 7: Generando datos aleatorios
Introducción
El módulo random de NumPy proporciona métodos convenientes para generar datos aleatorios que
tienen la forma y distribución deseadas.
Examples
Creando una matriz aleatoria simple
Poniendo la semilla
Utilizando random.seed :
np.random.seed(0)
np.random.rand(5)
# Out: array([ 0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
prng = np.random.RandomState(0)
prng.rand(5)
# Out: array([ 0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
'''
Out: array([[12, 14, 17, 16, 18],
[18, 11, 16, 17, 17],
[18, 11, 15, 19, 18],
[19, 14, 13, 10, 13],
[15, 10, 12, 13, 18]])
'''
letters = list('abcde')
https://riptutorial.com/es/home 26
Seleccione tres letras al azar ( con reemplazo : el mismo elemento se puede elegir varias veces):
np.random.choice(letters, 3)
'''
Out: array(['e', 'e', 'd'],
dtype='<U1')
'''
np.random.choice(letters, 3, replace=False)
'''
Out: array(['a', 'c', 'd'],
dtype='<U1')
'''
# Choses 'a' with 40% chance, 'b' with 30% and the remaining ones with 10% each
np.random.choice(letters, size=10, p=[0.4, 0.3, 0.1, 0.1, 0.1])
'''
Out: array(['a', 'b', 'e', 'b', 'a', 'b', 'b', 'c', 'a', 'b'],
dtype='<U1')
'''
# This result can also be achieved with the more general np.random.normal
np.random.normal(0, 1, 5)
# Out: array([-0.84423086, 0.70564081, -0.39878617, -0.82719653, -0.4157447 ])
Hay varias distribuciones adicionales disponibles en numpy.random , por ejemplo, poisson , binomial
y logistic
https://riptutorial.com/es/home 27
# Out: array([ 1.23471936, 2.28598718, -0.81045893, 2.2474899 , 4.15836878])
https://riptutorial.com/es/home 28
Capítulo 8: Indexación booleana
Examples
Creando un array booleano
Una matriz booleana se puede crear manualmente usando dtype=bool al crear la matriz. Los
valores distintos de 0 , None , False o cadenas vacías se consideran verdaderos.
import numpy as np
arr_1 = np.random.randn(3, 3)
arr_2 = np.random.randn(3, 3)
https://riptutorial.com/es/home 29
Capítulo 9: numpy.cross
Sintaxis
• # producto cruzado de a y b (o vectores en a y b )
numpy.cross(a, b)
• numpy.cross(a, b, axisa=-1) # producto cruzado de vectores en a con b , los vectores st en a
están dispuestos a lo largo del eje axisa
• numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1) # productos cruzados de vectores en a y b ,
vectores de salida dispuestos a lo largo del eje especificado por axisc
• numpy.cross(a, b, axis=None) # productos cruzados de vectores en a y b , vectores en a , b ,
y en salida distribuidos a lo largo del eje
Parámetros
Columna Columna
Examples
Producto cruzado de dos vectores
Numpy proporciona una función cross para la computación de productos cruzados vectoriales. El
producto cruzado de los vectores [1, 0, 0] y [0, 1, 0] es [0, 0, 1] . Numpy nos dice:
https://riptutorial.com/es/home 30
>>> a = np.array([1, 0, 0])
>>> b = np.array([0, 1, 0])
>>> np.cross(a, b)
array([0, 0, 1])
como se esperaba.
Mientras que los productos cruzados se definen normalmente solo para vectores tridimensionales.
Sin embargo, cualquiera de los argumentos de la función Numpy puede ser dos vectores de
elementos. Si el vector c se da como [c1, c2] , Numpy asigna cero a la tercera dimensión: [c1,
c2, 0] . Asi que,
A diferencia del dot que existe tanto como una función Numpy como un método de ndarray , cross
solo existe como una función independiente:
>>> a.cross(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'cross'
>>> a=np.array([[1,0,0],[0,1,0],[0,0,1]])
>>> b=np.array([1,0,0])
>>> np.cross(a,b)
array([[ 0, 0, 0],
[ 0, 0, -1],
[ 0, 1, 0]])
El resultado en este caso es array ([np.cross (a [0], b), np.cross (a [1], b), np.cross (a [2], b)])
b también puede ser una matriz de vectores de 3 (o 2) elementos, pero debe tener la misma forma
que a . De lo contrario, el cálculo falla con un error de "desajuste de forma". Para que podamos
tener
>>> b=np.array([[0,0,1],[1,0,0],[0,1,0]])
>>> np.cross(a,b)
array([[ 0, -1, 0],
[ 0, 0, -1],
[-1, 0, 0]])
https://riptutorial.com/es/home 31
En nuestros dos últimos ejemplos, numpy asumió que a[0,:] era el primer vector, a[1,:] el
segundo, y a[2,:] el tercero. Numpy.cross tiene un argumento opcional axisa que nos permite
especificar qué eje define los vectores. Asi que,
>>> a=np.array([[1,1,1],[0,1,0],[1,0,-1]])
>>> b=np.array([0,0,1])
>>> np.cross(a,b)
array([[ 1, -1, 0],
[ 1, 0, 0],
[ 0, -1, 0]])
>>> np.cross(a,b,axisa=0)
array([[ 0, -1, 0],
[ 1, -1, 0],
[ 0, -1, 0]])
>>> np.cross(a,b,axisa=1)
array([[ 1, -1, 0],
[ 1, 0, 0],
[ 0, -1, 0]])
Un parámetro opcional similar, axisb , realiza la misma función para la entrada b , si también es
una matriz bidimensional.
Los parámetros axisa y axisb le dicen a los números cómo distribuir los datos de entrada. Un
tercer parámetro, axisc le dice a Númpy cómo distribuir la salida si a o b es multidimensional.
Usando las mismas entradas a y b que arriba, obtenemos
>>> np.cross(a,b,1)
array([[ 1, -1, 0],
[ 1, 0, 0],
[ 0, -1, 0]])
>>> np.cross(a,b,1,axisc=0)
array([[ 1, 1, 0],
[-1, 0, -1],
[ 0, 0, 0]])
>>> np.cross(a,b,1,axisc=1)
array([[ 1, -1, 0],
[ 1, 0, 0],
[ 0, -1, 0]])
Entonces, axisc=1 y el axisc predeterminado dan el mismo resultado, es decir, los elementos de
cada vector son contiguos en el índice de movimiento más rápido de la matriz de salida. Axisc es
por defecto el último eje de la matriz. axisc=0 distribuye los elementos de cada vector en la
dimensión variable más lenta de la matriz.
Si desea que axisa , axisb y axisc tengan el mismo valor, no necesita configurar los tres
parámetros. Puede configurar un cuarto parámetro, axis , al valor único necesario y los otros tres
parámetros se establecerán automáticamente. axis reemplaza a axisa, axisb o axisc si alguno de
ellos está presente en la llamada de función.
https://riptutorial.com/es/home 32
Lea numpy.cross en línea: https://riptutorial.com/es/numpy/topic/6166/numpy-cross
https://riptutorial.com/es/home 33
Capítulo 10: numpy.dot
Sintaxis
• numpy.dot (a, b, out = None)
Parámetros
Nombre Detalles
Observaciones
numpy.dot
Examples
Multiplicación de matrices
https://riptutorial.com/es/home 34
La segunda forma de hacer la multiplicación de matrices es con la función de biblioteca numpy.
>>> np.dot(A,B)
array([[ 4., 4.],
[ 4., 4.],
[ 4., 4.],
[ 4., 4.]])
La función de puntos también se puede usar para calcular productos de puntos vectoriales entre
dos matrices numpy unidimensionales.
>>> v = np.array([1,2])
>>> w = np.array([1,2])
>>> v.dot(w)
5
>>> np.dot(w,v)
5
>>> np.dot(v,w)
5
El parametro de salida
La función de punto numpy tiene un parámetro opcional out = None. Este parámetro le permite
especificar una matriz para escribir el resultado. Esta matriz debe ser exactamente la misma
forma y tipo que la matriz que se habría devuelto, o se lanzará una excepción.
>>> I = np.eye(2)
>>> I
array([[ 1., 0.],
[ 0., 1.]])
>>> result = np.zeros((2,2))
>>> result
array([[ 0., 0.],
[ 0., 0.]])
>>> np.dot(I, I, out=result)
array([[ 1., 0.],
[ 0., 1.]])
>>> result
array([[ 1., 0.],
[ 0., 1.]])
Y si intentamos usar un orden de memoria subyacente diferente, digamos estilo Fortran (por lo
que las columnas son contiguas en lugar de filas), también se produce un error.
https://riptutorial.com/es/home 35
>>> result = np.zeros((2,2), order='F')
>>> np.dot(I, I, out=result)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: output array is not acceptable (must have the right type, nr dimensions, and be a
C-Array)
numpy.dot se puede utilizar para multiplicar una lista de vectores por una matriz, pero la
orientación de los vectores debe ser vertical, de modo que una lista de ocho vectores de dos
componentes aparezca como dos vectores de ocho componentes:
>>> a
array([[ 1., 2.],
[ 3., 1.]])
>>> b
array([[ 1., 2., 3., 4., 5., 6., 7., 8.],
[ 9., 10., 11., 12., 13., 14., 15., 16.]])
>>> np.dot(a, b)
array([[ 19., 22., 25., 28., 31., 34., 37., 40.],
[ 12., 16., 20., 24., 28., 32., 36., 40.]])
Si la lista de vectores se presenta con sus ejes al revés (lo que suele ser el caso), la matriz debe
transponerse antes y después de la operación de puntos como esta:
>>> b
array([[ 1., 9.],
[ 2., 10.],
[ 3., 11.],
[ 4., 12.],
[ 5., 13.],
[ 6., 14.],
[ 7., 15.],
[ 8., 16.]])
>>> np.dot(a, b.T).T
array([[ 19., 12.],
[ 22., 16.],
[ 25., 20.],
[ 28., 24.],
[ 31., 28.],
[ 34., 32.],
[ 37., 36.],
[ 40., 40.]])
Aunque la función de punto es muy rápida, a veces es mejor usar einsum. El equivalente de lo
anterior sería:
>>> np.einsum('...ij,...j', a, b)
Es un poco más lento pero permite multiplicar una lista de vértices por una lista correspondiente
de matrices. Este sería un proceso muy complicado usando el punto:
https://riptutorial.com/es/home 36
>>> a
array([[[ 0, 1],
[ 2, 3]],
[[ 4, 5],
[ 6, 7]],
[[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15]],
[[16, 17],
[18, 19]],
[[20, 21],
[22, 23]],
[[24, 25],
[26, 27]],
[[28, 29],
[30, 31]]])
>>> np.einsum('...ij,...j', a, b)
array([[ 9., 29.],
[ 58., 82.],
[ 123., 151.],
[ 204., 236.],
[ 301., 337.],
[ 414., 454.],
[ 543., 587.],
[ 688., 736.]])
numpy.dot se puede usar para encontrar el producto de puntos de cada vector en una lista con un
vector correspondiente en otra lista. Esto es bastante complicado y lento en comparación con la
multiplicación y suma de elementos a lo largo del último eje. Algo como esto (que requiere que se
calcule una matriz mucho más grande pero que se ignore en su mayoría)
>>> np.diag(np.dot(b,b.T))
array([ 82., 104., 130., 160., 194., 232., 274., 320.])
>>> (b * b).sum(axis=-1)
array([ 82., 104., 130., 160., 194., 232., 274., 320.])
>>> np.einsum('...j,...j', b, b)
array([ 82., 104., 130., 160., 194., 232., 274., 320.])
https://riptutorial.com/es/home 37
Capítulo 11: Regresión lineal simple
Introducción
Ajustar una línea (u otra función) a un conjunto de puntos de datos.
Examples
Utilizando np.polyfit
Creamos un conjunto de datos que luego ajustamos con una línea recta $ f (x) = mx + c $.
npoints = 20
slope = 2
offset = 3
x = np.arange(npoints)
y = slope * x + offset + np.random.normal(size=npoints)
p = np.polyfit(x,y,1) # Last argument is degree of polynomial
Usando np.linalg.lstsq
npoints = 20
slope = 2
offset = 3
x = np.arange(npoints)
y = slope * x + offset + np.random.normal(size=npoints)
https://riptutorial.com/es/home 38
ax = fig.add_subplot(111)
plt.plot(x, y, 'bo', label="Data")
plt.plot(x, m*x+c, 'r--',label="Least Squares")
plt.show()
https://riptutorial.com/es/home 39
Capítulo 12: subclasificando ndarray
Sintaxis
• def __array_prepare__(self, out_arr: ndarray, context: Tuple[ufunc, Tuple, int] = None) ->
ndarray: # called on the way into a ufunc
• def __array_wrap__(self, out_arr: ndarray, context: Tuple[ufunc, Tuple, int] = None) ->
ndarray: # called on the way out of a ufunc
• __array_priority__: int # used to determine which argument to invoke the above methods on
when a ufunc is called
• def __array_finalize__(self, obj: ndarray): # called whenever a new instance of this class
comes into existence, even if this happens by routes other than __new__
Examples
Seguimiento de una propiedad extra en matrices
class MySubClass(np.ndarray):
def __new__(cls, input_array, info=None):
obj = np.asarray(input_array).view(cls)
obj.info = info
return obj
# handles my_arr.view(MySubClass)
else:
self.info = None
Para la tupla de context , func es un objeto ufunc como np.add , args es una tuple y
which_return_val es un entero que especifica qué valor de retorno del ufunc se está procesando
https://riptutorial.com/es/home 40
Lea subclasificando ndarray en línea: https://riptutorial.com/es/numpy/topic/6431/subclasificando-
ndarray
https://riptutorial.com/es/home 41
Creditos
S.
Capítulos Contributors
No
Ahorro y carga de
2 obachtos
matrices
Archivo IO con
4 Alex, atomh33ls, Sparkler
numpy
Generando datos
7 amin, ayhan, B8vrede, Dux, Fermi paradox, user2314737
aleatorios
Regresión lineal
11 Alex
simple
subclasificando
12 Eric
ndarray
https://riptutorial.com/es/home 42