创建随机矩阵A
import numpy as np
A = np.random.normal(size=[200, 500])
9-1
AA = A + A
AAT = np.matmul(A, A.transpose())
ATA = np.matmul(A.transpose(), A)
AB = np.matmul(A, B)
def mul_A_B_I(A, B, constant):
sub = np.eye([len(B), len(B)])
return np.matmul(A, B - constant*sub)
9-2
b = np.array(list(range(1,501)))
x = np.linalg.solve(B,b)
9-3
na = np.linalg.norm(A,'fro')
nb = np.linalg.norm(B,np.inf)
u, s, vh = np.linalg.svd(B,full_matrices=True)
maxs = np.max(s)
mins = np.min(s)
9-4
def Exercise_9_4(A, B, n, m):
Z = np.random.standard_normal((n, n))
num = 0
u_k = np.ones(n)
v_k_norm = 0
v_k = np.zeros(n)
begin = time.clock()
while(True):
v_k = np.dot(Z, u_k)
v_k_norm_temp = v_k_norm
v_k_norm = np.linalg.norm(v_k)
u_k = v_k / v_k_norm
num += 1
if(abs(v_k_norm_temp - v_k_norm) < 0.0005):
break;
end = time.clock()
return v_k_norm,u_k,num,end-begin
9-5
for n in (10,50,50):
for p in (0.2,0.5,0.8):
C = np.random.binomial(1,p,(n,n))
u, s, vh = np.linalg.svd(C)
maxs = max(s)
print(maxs)
9-6
idx = np.argmin(np.abs(A - 50))
print(A[idx//np.shape(A)[0]][idx%np.shape(A)[1]])