Jupyter Snippet CB2nd 03_numpy
Jupyter Snippet CB2nd 03_numpy
1.3. Introducing the multidimensional array in NumPy for fast array computations
import random
import numpy as np
n = 1000000
x = [random.random() for _ in range(n)]
y = [random.random() for _ in range(n)]
x[:3], y[:3]
([0.926, 0.722, 0.962], [0.291, 0.339, 0.819])
z = [x[i] + y[i] for i in range(n)]
z[:3]
[1.217, 1.061, 1.781]
%timeit [x[i] + y[i] for i in range(n)]
101 ms ± 5.12 ms per loop (mean ± std. dev. of 7 runs,
10 loops each)
xa = np.array(x)
ya = np.array(y)
xa[:3]
array([ 0.926, 0.722, 0.962])
za = xa + ya
za[:3]
array([ 1.217, 1.061, 1.781])
%timeit xa + ya
1.09 ms ± 37.3 µs per loop (mean ± std. dev. of 7 runs,
1000 loops each)
%timeit sum(x) # pure Python
3.94 ms ± 4.44 µs per loop (mean ± std. dev. of 7 runs
100 loops each)
%timeit np.sum(xa) # NumPy
298 µs ± 4.62 µs per loop (mean ± std. dev. of 7 runs,
1000 loops each)
d = [abs(x[i] - y[j])
for i in range(1000)
for j in range(1000)]
d[:3]
[0.635, 0.587, 0.106]
da = np.abs(xa[:1000, np.newaxis] - ya[:1000])
da
array([[ 0.635, 0.587, ..., 0.849, 0.046],
[ 0.431, 0.383, ..., 0.646, 0.158],
...,
[ 0.024, 0.024, ..., 0.238, 0.566],
[ 0.081, 0.033, ..., 0.295, 0.509]])
%timeit [abs(x[i] - y[j]) \
for i in range(1000) \
for j in range(1000)]
134 ms ± 1.79 ms per loop (mean ± std. dev. of 7 runs,
1000 loops each)
%timeit np.abs(xa[:1000, np.newaxis] - ya[:1000])
1.54 ms ± 48.9 µs per loop (mean ± std. dev. of 7 runs
1000 loops each)