Notas curso
https://codigofacilito.com/videos/crear-arreglos
$ python -m venv venv
$ . venv/Scripts/activate // windows
$ . venv/bin/activate // linux
$ pip install ipython numpy // pip install -r requirements.txt
$ code .
en python es falso: False None "" '' 0 0.0 [] {} ()
Funciones básicas de arrays
import numpy as np
a = np.array([1,2,3,4,5])
In [6]: a.dtype
Out[6]: dtype('int32')
In [7]: a = np.array([1,2,3,4,5], dtype=float)
In [8]: a.dtype
Out[8]: dtype('float64')
In [9]: a
Out[9]: array([1., 2., 3., 4., 5.])
In [13]: a = np.arange(0,10)
In [14]: a
Out[14]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [15]: a = np.arange(0,10,2)
In [16]: a
Out[16]: array([0, 2, 4, 6, 8])
In [17]: np.zeros(10)
Out[17]: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
In [18]: np.ones(5)
Out[18]: array([1., 1., 1., 1., 1.])
In [19]: np.ones(5, dtype=int)
Out[19]: array([1, 1, 1, 1, 1])
In [24]: np.empty(10, dtype=int)
Out[24]:
array([ 0, 1072693248, 0, 1072693248, 0,
1072693248, 0, 1072693248, 0, 1072693248])
In [26]: np.random.randint(0,100,10)
Out[26]: array([28, 25, 97, 39, 28, 71, 59, 90, 78, 2])
Obtener elementos del array
In [27]: x = np.random.randint(0,10,10)
In [28]: x
Out[28]: array([9, 1, 3, 3, 8, 5, 7, 5, 6, 7])
In [29]: x[-1]
Out[29]: 7
In [30]: x[0]
Out[30]: 9
In [31]: len(x)
Out[31]: 10
In [32]: x[-1] = 100
In [33]: x
Out[33]: array([ 9, 1, 3, 3, 8, 5, 7, 5, 6, 100])
Subarrays, copias y vistas
In [35]: a = np.random.randint(0,10,20)
In [36]: a[:5]
Out[36]: array([9, 2, 0, 4, 6])
In [37]: a
Out[37]: array([9, 2, 0, 4, 6, 6, 9, 8, 3, 1, 4, 9, 3, 7, 1, 0, 2, 4, 3, 0])
In [38]: b = a.copy()
In [39]: b
Out[39]: array([9, 2, 0, 4, 6, 6, 9, 8, 3, 1, 4, 9, 3, 7, 1, 0, 2, 4, 3, 0])
In [40]: b[0]=90
In [41]: b
Out[41]:
array([90, 2, 0, 4, 6, 6, 9, 8, 3, 1, 4, 9, 3, 7, 1, 0, 2,
4, 3, 0])
In [42]: a
Out[42]: array([9, 2, 0, 4, 6, 6, 9, 8, 3, 1, 4, 9, 3, 7, 1, 0, 2, 4, 3, 0])
In [43]: c = a.view()
In [44]: c
Out[44]: array([9, 2, 0, 4, 6, 6, 9, 8, 3, 1, 4, 9, 3, 7, 1, 0, 2, 4, 3, 0])
In [45]: c[0]=80
In [46]: c
Out[46]:
array([80, 2, 0, 4, 6, 6, 9, 8, 3, 1, 4, 9, 3, 7, 1, 0, 2,
4, 3, 0])
In [47]: a
Out[47]:
array([80, 2, 0, 4, 6, 6, 9, 8, 3, 1, 4, 9, 3, 7, 1, 0, 2,
4, 3, 0])
In [53]: a = np.arange(0,10)
In [55]: a
Out[55]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [54]: a[0:10:2]
Out[54]: array([0, 2, 4, 6, 8])
In [57]: a = np.random.randint(0,100,10)
In [58]: a
Out[58]: array([39, 35, 33, 69, 54, 1, 94, 0, 5, 18])
In [59]: a[[0,5,9]]
Out[59]: array([39, 1, 18])
In [61]: b = np.array([1,2,3,4,5])
In [62]: b
Out[62]: array([1, 2, 3, 4, 5])
In [63]: b[[True, False, False, False, True]]
Out[63]: array([1, 5])
In [64]: b[[0,-1]]
Out[64]: array([1, 5])
Vectorizar funciones
In [69]: b
Out[69]: array([1, 2, 3, 4, 5])
In [65]: def cuadrado(x:int) -> int:
...: return x*x
...:
In [66]: cuadrado(3)
Out[66]: 9
In [67]: haz_cuadrado = np.vectorize(cuadrado)
In [68]: haz_cuadrado(b)
Out[68]: array([ 1, 4, 9, 16, 25])
Vectorizar con lambdas
In [69]: b
Out[69]: array([1, 2, 3, 4, 5])
In [70]: vector = np.vectorize(lambda valor: valor*valor)
In [71]: vector(b)
Out[71]: array([ 1, 4, 9, 16, 25])
Matrices
In [73]: A = np.array([
...: [1,2,3,4,5],
...: [10,20,30,40,50],
...: [100,200,300,400,500]])
In [74]: A
Out[74]:
array([[ 1, 2, 3, 4, 5],
[ 10, 20, 30, 40, 50],
[100, 200, 300, 400, 500]])
In [75]: A.ndim
Out[75]: 2
In [76]: A.shape
Out[76]: (3, 5)
In [77]: A[1][1]
Out[77]: 20
In [78]: A[0][0]
Out[78]: 1
In [79]: A[-1][-1]
Out[79]: 500
In [80]: A
Out[80]:
array([[ 1, 2, 3, 4, 5],
[ 10, 20, 30, 40, 50],
[100, 200, 300, 400, 500]])
In [81]: A[0,0]
Out[81]: 1
In [82]: A[1,1]
Out[82]: 20
In [83]: A[2,4]
Out[83]: 500
In [87]: A[1,:3]
Out[87]: array([10, 20, 30])
In [90]: A[-1,-3:]
Out[90]: array([300, 400, 500])
A[:,3]
Out[91]: array([ 4, 40, 400])
In [92]: A[[0,2],3]
Out[92]: array([ 4, 400])