$30
CT5132/CT5148 Lab Week 03
Solutions are available in the /code directory in our .zip.
1. Last week we calculated a list containing ex ∀x ∈ [0.0,0.1,...,1.0], using range, lambda, map and math.exp. Now, let’s do the Numpy way, using np.linspace and np.exp. Solution: exp_np.py.
2. In the ECG (heartbeat) example, we saw how to use a Boolean expression to give a new array telling us where the Boolean expression is true:
x = np.array([-3, -2, -1, 0, 1, 2, 3]) x 0
# array([False, False, False, False, True, True, True])
We can also create a new array consisting of the values where it is true:
x = np.array([-3, -2, -1, 0, 1, 2, 3]) x[x 0]
# array([1, 2, 3])
We can use the same idea now on the left-hand side of an assignment, to overwrite only values in an array where the Boolean expression is true. Use this to set all negative values in x to zero. Solution: numpy_boolean_lhs.py.
3. Find the biggest jump between any two consecutive values in the heartbeat (ECG) data. When does it occur? What were the before and after values? Hint: recall we have seen np.diff and np.argmax. I suggest np.diff(x, prepend=x[0]) this time instead of prepend=0. Solution: heartbeat_jump.py.
4. Use Numpy to create a “chessboard” pattern like this:
[[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]]
Hints: use np.linspace, np.meshgrid, and the % operator. For the final touch, look up astype so that your array is int-valued, not float. Solution: chessboard.py.
1
5. Create the 2d array aij, a “vertical” 1d array bi, a “horizontal” 1d array cj, and a scalar d. Calculate the new 2d array q where qij = aij +bi +cj +d. (This scenario will be familiar to CT5141 Optimisation students as it occurs in linear objective functions.) Solution: 2d_1d_scalar.py.
a: 9 5
1
b: 10
c: 100 200 300
d: 1000
q: 1119 1215 1311
4 3
8
20
1124 1223 1328
2 7
6
30
1132 1237 1336
6. In our fractals example, we claimed that when a point “escapes” from a circle of radius 2, it will never come back, but in test_escape_and_return(), that’s exactly what seemed to happen. Why? Solution: fractal_escape_and_return.py.
7. Try different values for zmin and zmax in the Julia example. What is the effect?
8. Try different values for c. Do you get any interesting images? I liked c = -0.015 + 0.66j.
9. Try different colourmaps in the Julia set. Look up:
https://matplotlib.org/3.1.0/tutorials/colors/colormaps.html
to see a gallery.
2