Indently 5 Great Numpy Features
Broadcasting
import numpy as np
arr = np.array([1,2,3])
print(arr+10)
print(arr+[1,2,4])
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr)
print(arr+10)
print(arr+[1,2,4]) # adds [1,2,4] to each row
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr)
print(arr.transpose()+[1,2,4])
print((arr.transpose()+[1,2,4]).transpose()) # adds [1,2,4] to each column
In general, a scalar operation applied to a numpy array applies that scalar operation to each element of the array.
Masking
import numpy as np
arr = np.array([1,5,7,2,9,10])
mask = arr > 5
print(arr[mask])
arr[arr > 5] = 0
mask = arr % 2 == 0
print(arr[mask])
Where
arr = np.array([5,10,15,20,-5,2])
result = np.where(arr > 10, "High", "Low")
# [ low low high high low low ]
counter = Counter(result.tolist())
for k,v in counter.items:
print(f'{k}: {v}')
Funky Indexing
arr = np.array([10,20,30,40,50,60,70])
indices = [0,2,4,5]
print(arr[indices])
print(arr[[0,2,4,5]])
arr[1:4] = [999,999,999]
arr[[1,3,5]] = 1
Clip
pixels = np.array([100,180,260,-20,90,300])
clipped = np.clip(pixels,0, 255)