Exercise 10.1: Least squares Generate matrix A ∈ Rm×n with m > n. Also generate some vector b ∈ Rm. Now find x = argminxkAx−bk2. Print the norm of the residual.
import numpy as np import scipy.optimize as opt #Exercise 10.1 m = 5 n = 3 A = np.random.normal(3,1, (m, n)) b = np.random.normal(5,1,(m, 1)) x = np.dot(np.dot(np.linalg.inv(np.dot(A.T, A)), A.T), b) print(x)
Exercise 10.2: Optimization Find the maximum of the function
f(x) = sin2(x−2)e−x2
import numpy as np import scipy.optimize as opt #Exercise 10.2 def f(x): return - np.power(np.sin(x - 2), 2) * np.exp(- np.power(x, 2)) res = opt.minimize_scalar(f) print(res.fun)
Exercise 10.3: Pairwise distances Let X be a matrix with n rows and m columns. How can you compute the pairwise distances between every two rows?
As an example application, consider n cities, and we are given their coordinates in two columns. Now we want a nice table that tells us for each two cities, how far they are apart.
import numpy as np import scipy.spatial as spa X = np.array([[0,1], [0,2], [2,5], [4,3]]) pair_dis = spa.distance.pdist(X, 'euclidean') #以向量的二范数作为距离的计算方法 n = X.shape[0] for first in range(0, n): for second in range(first+1, n): print('The distance between city {} and city {} is {}.'.format( first, second, pair_dis[int((n+n-1-first)*first/2 + second-first-1)]))