Numpy作业
题目截图
生成A和B
from scipy import linalg
import numpy as np
A = np.random.normal(0,1,100000).reshape(200,500)
B = linalg.toeplitz(list(range(1,500)))
9.1
题目截图
代码
# 9.1
print(A + A)
print(np.dot(A, A.T))
print(np.dot(A.T, A))
print(np.dot(A, B))
def compute(x):
return np.dot(A, B - x * np.eye(500))
9.2
题目截图
代码
# 9.2
b = np.linspace(1, 500, 500)
# 解线性方程
print(np.linalg.solve(B, b))
9.3
题目截图
代码
# 9.3
# 求范数
print(linalg.norm(A, 'fro'))
print(linalg.norm(B, np.inf))
# 求奇异值
b = linalg.svdvals(B).tolist()
print(max(b))
print(min(b))
9.4
题目截图
代码
def getMatrix(n):
return np.random.normal(0, 1, n*n).reshape(n, n)
def calculateTime(n):
Z = getMatrix(n) # Z矩阵
v = np.array(list(range(1, n+1))[::-1]) # 初始向量
a, tempa = linalg.norm(v, np.inf), 0 # 特征值
x = 0 # 记录次数
t = time.clock() # 记录时间
while True:
tempa = a
y = np.dot(Z, v)
a = linalg.norm(y, np.inf)
v = y / a
x += 1
if abs(tempa - a) < 0.000001:# 判停条件
break
t = time.clock() - t
return x, t, v, a
result = calculateTime(10)
print("次数为:%d"%result[0])
print("时间为:%f"%result[1])
print("特征向量为:",end="")
print(result[2])
print("特征值为:%f"%result[3])
结果截图
9.5
题目截图
代码
# 9.5
def getSingle(n, p):
M = np.random.binomial(1, p, [n, n])
return max(linalg.svdvals(M))
print(getSingle(10, 0.25))
print(getSingle(100, 0.25))
print(getSingle(1000, 0.25))
print(getSingle(2000, 0.25))
结果截图
由结果可知,当n足够大时,矩阵的最大奇异值收敛于np
9.6
题目截图
代码
A = np.random.normal(0, 1, 400).reshape(20, 20)
def getClosed(A, val):
a = min(A[A>val])
b = max(A[A<=val])
return b if abs(a-val) > abs(b-val) else a
print(getClosed(A, 0.5))