Advanced NumPy
Operations on NumPy arrays
Learning Objectives
- Learner will explain the difference between element-wise and matrix product of two arrays.
- Learner will apply reduction functions (mean, min, max) along a given axis.
- Learner will be able to find a specialised numerical algorithm from the ones available in numpy.
- Learner will be able to sort array along given axis.
Multiplication of two arrays is elementwise. For example, to calculate a square of each element we may use:
>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> b = a * a
>>> b
array([0, 1, 4])
Matrix products are calculated using the np.dot
function:
>>> np.dot(a, a)
5
For 1-D arrays the same result can be obtained by:
>>> np.sum(a * a)
5
Axis-based reductions
The np.sum
function sums all elements regardless of the number of array dimensions:
>>> b = np.arange(9).reshape(3,3)
>>> b
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> np.sum(b)
36
If you want to sum only columns or rows, you need to pass the index of the axis over which you want to sum:
>>> np.sum(b, 0)
array([ 9, 12, 15])
>>> np.sum(b, 1)
array([ 3, 12, 21])
Other similar reduction functions are np.min
, np.max
or np.mean
:
>>> np.min(b)
0
>>> np.min(b, 0)
array([0, 1, 2])
>>> np.min(b, 1)
array([0, 3, 6])
You can also find the index of the minimum element in each axis:
>>> np.argmin(b, 0)
array([0, 0, 0])
Sorting
NumPy also implement various sorting algorithms. To sort elements of an array you can use np.sort
functions:
>>> a = np.random.rand(4)
>>> a
array([ 0.9490829 , 0.07528673, 0.17463988, 0.95964801])
>>> np.sort(a)
array([ 0.07528673, 0.17463988, 0.9490829 , 0.95964801])
Similarly to the reduction functions, you can also pass the axis index to sort along:
>>> b = a.reshape(2, 2)
>>> b
array([[ 0.9490829 , 0.07528673],
[ 0.17463988, 0.95964801]])
>>> np.sort(b, 0)
array([[ 0.17463988, 0.07528673],
[ 0.9490829 , 0.95964801]])
>>> np.sort(b, 1)
array([[ 0.07528673, 0.9490829 ],
[ 0.17463988, 0.95964801]])
np.argsort
returns the order of elements in a sorted array:
>>> np.argsort(a)
array([1, 2, 0, 3])
Special modules
NumPy also provides extra modules implementing basic numerical methods:
np.linalg
– linear algebra,np.fft
– fast Fourier transform,np.random
– random number generators.
Finding closest element
Generate a 10 x 3 array of random numbers (using np.random.rand
). From each row, find the column index of the element closest to 0.75. Make use of np.abs and np.argmin. The result should be a one-dimensional array of integers from 0 to 2.
Solving linear equations
Solve the following system of linear equations using np.linalg.solve
. Test the solution. \[2x + 3y = 3\] \[5x - y = 6\]