import numpy as np
a = np.arange(10)
%timeit [x**2 + 2*x - 1 for x in a]
7.03 µs ± 861 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
%timeit a**2 + 2*a - 1
4.47 µs ± 592 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
import numpy as np
a = np.arange(1, 1_000_000, dtype=np.float64)
%timeit [np.sqrt(x) for x in a]
1.66 s ± 95.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit np.sqrt(a)
4.41 ms ± 729 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
# Da vectorisation ne renvoie plus un tableau : elle met à jour le tableau défini par out : ici a
# On gagne en espace mémoire
# On gagne en rapidité car on ne crée plus un nouvel objet
%timeit np.sqrt(a, out=a)
2.01 ms ± 372 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
%timeit -r 1 -n 1 [np.sqrt(x) for x in a]
1.71 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r 1 -n 1 np.sqrt(a)
2.82 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
%timeit -r 1 -n 1 np.sqrt(a, out=a)
1.84 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
import numpy as np
a = np.arange(10, dtype=np.float32)
a
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.], dtype=float32)
# que les racines de a[2], a[4] et a[9]
np.sqrt.at(a, [2, 4, 9])
a
array([0. , 1. , 1.4142135, 3. , 2. , 5. , 6. , 7. , 8. , 3. ], dtype=float32)
b=np.array([9, 8, 7, 6, 5, 4, 3, 2, 1], dtype='float32')
b
array([9., 8., 7., 6., 5., 4., 3., 2., 1.], dtype=float32)
np.sqrt.at(b, [2, 4, 6])
b
array([9. , 8. , 2.6457512, 6. , 2.236068 , 4. , 1.7320508, 2. , 1. ], dtype=float32)
a = np.arange(1, 10).reshape(3, 3)
a
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.sum(a)
45
np.sum(a, axis=0)
array([12, 15, 18])
np.sum(a, axis=1)
array([ 6, 15, 24])
np.nan
nan
np.sum(a, axis=1)
array([ 6, 15, 24])
a = np.arange(1, 10, dtype=np.float64).reshape(3, 3)
# np.sum(a) vaut 45
np.sum(a)
45.0
# on met nan, qui est un float, en a[1, 1]
a[1, 1] = np.nan
a
array([[ 1., 2., 3.], [ 4., nan, 6.], [ 7., 8., 9.]])
# np.sum(a) vaut nan
np.sum(a)
nan
# on utilize nansum()
# np.nansum(a) vaut 40
np. nansum (a)
40.0
np. nansum (a, axis=0)
array([12., 10., 18.])
np.nonzero(a)
(array([0, 0, 0, 1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2, 0, 1, 2]))
a
array([[ 1., 2., 3.], [ 4., nan, 6.], [ 7., 8., 9.]])
a[1, 2] = np.nan
a
array([[ 1., 2., 3.], [ 4., nan, nan], [ 7., 8., 9.]])
np.isnan(a)
array([[False, False, False], [False, True, True], [False, False, False]])
np.sum(np.isnan(a))
2
np.invert(np.isnan(a))
array([[ True, True, True], [ True, False, False], [ True, True, True]])
np.sum(np.invert(np.isnan(a)), axis=0)
array([3, 2, 2])
np.sum(np.invert(np.isnan(a)), axis=1)
array([3, 1, 3])