【题目】
【解题思路】
根据题目要求,依次使用numpy中的函数,这里也使用到了scipy中的一个函数。
【代码】
初始化
import numpy import numpy.random import scipy.linalg import time n = 200 m = 500 p = 0.5 z = 0.5 A = numpy.random.normal(0.0, 1.0, (n, m)) B = scipy.linalg.toeplitz(list(range(1, m + 1))[::-1], list(range(1, m + 1)[::-1]))
exercise 9.1
A_add_A = A + A A_mul_At = numpy.dot(A, A.T) # multiply At_mul_A = numpy.dot(A.T, A) A_mul_B = numpy.dot(A, B) l = 1 # λ I = numpy.eye(m) # matrix I B_min_lI = B - I * l A_mul_B_min_lI = numpy.dot(A, B_min_lI)
exercise 9.2
b = numpy.random.randint(0, 10, (m,1)) x = numpy.linalg.solve(B, b) # solve BX = b
exercise 9.3
numpy.linalg.norm(A, "fro") # ||A||F numpy.linalg.norm(B, numpy.inf) # ||A||∞
exercise 9.4
Z = numpy.random.randint(0, 10, (n,n)) t1 = time.clock() # get eigenvalue, eigenvector evalue, evector = numpy.linalg.eig(Z) # find maximum maxi = 0 maxevalue = evalue[0] for i in range(1, len(evalue)): if evalue[i] > maxevalue: maxi = i maxevalue = evalue[i] t2 = time.clock() # CPU execute time t = t2 - t1 print(t)
exercise 9.5
# Binomial Distribution matrix C = numpy.random.binomial(1, p, n) for i in range(1,n): C = numpy.vstack((C, numpy.random.binomial(1, p, n))) # Singular Value Decomposition Csvd = numpy.linalg.svd(C)[1] # find maximum singular value print(max(Csvd)) print(n * p)
由结果可得,最大奇异值与n和p的乘积接近。
exercise 9.6
def find_nearest(z, A): # construct a matrix A_minus_z, elements in which # equals to abs(elements in A - z) A_minus_z = A for i in A_minus_z: i = abs(i - z) # find the index of minimum which means the nearest index = argmin(A_minus_z) return A[index]