【高编作业】exercise - Numpy

【题目】



【解题思路】

根据题目要求,依次使用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]

猜你喜欢

转载自blog.csdn.net/weixin_40247273/article/details/80382396