numpy习题

本文通过实例演示了如何使用Python的numpy库进行矩阵生成、基本矩阵运算、求解线性方程组、计算矩阵范数及奇异值等操作。同时介绍了幂迭代法求解最大特征值及其对应的特征向量的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Generate matrices A, with random Gaussian entries, B, a Toeplitz matrix, where A ∈Rn×m and B ∈Rm×m, for n = 200, m = 500.

import numpy

p = 0.5
n = 200
m = 500
A = numpy.random.normal(size = (n,m))
print("A")
print(A)
print()

c = []
for i in range(1,m+1):
	c.append(i)
B = numpy.zeros((m,m))
for i in range(0,m):
	B[i][0] = c[i]
	B[0][i] = c[i]
for i in range(1,m):
	for j in range(1,m):
		B[i][j] = B[i-1][j-1]
print("B")
print(B)
print()

用numpy.random.normal()生成一个高斯随机矩阵A,根据托普利兹矩阵的定义,先生成一个1-500的数组c,并将其作为B矩阵的行和列,然后根据B[i][j] = B[i-1][j-1]生成矩阵(为了突显定义,其实这里可以用scipy.linalg.toeplitz()函数直接生成)

生成结果如下:

A
[[-0.46645476  0.0550974  -0.44369556 ... -1.6226811  -0.00320037
  -1.75647646]
 [-1.27108003 -0.4741925  -1.26609635 ... -0.40215026 -1.97148412
   0.25672255]
 [ 0.22429156  0.77585234  1.28187754 ...  0.4704511   0.42940274
   0.21989305]
 ...
 [-0.01780188 -0.10371208  0.67321426 ... -2.13390152 -1.17607206
   1.57033371]
 [ 0.29160645 -0.98551927  0.54417806 ... -1.14113903 -0.61335237
  -0.53037434]
 [-0.62390424 -0.2153697  -0.88552033 ... -1.35535395 -0.01569604
   0.1321662 ]]

B
[[  1.   2.   3. ... 498. 499. 500.]
 [  2.   1.   2. ... 497. 498. 499.]
 [  3.   2.   1. ... 496. 497. 498.]
 ...
 [498. 497. 496. ...   1.   2.   3.]
 [499. 498. 497. ...   2.   1.   2.]
 [500. 499. 498. ...   3.   2.   1.]]

Exercise 9.1: Matrix operations Calculate A + A, AA>,A>A and AB. Write a function that computes A(B−λI) for any λ. 

print("A + A")
print(A+A)
print()

print("AAT")
print(A.dot(A.T))
print()

print("ATA")
print(A.T.dot(A))
print()

print("AB")
print(A.dot(B))
print()

def cal(A,B,lamda):
	I = numpy.zeros((m,m))
	for i in range(0,m):
		I[i][i] = lamda
	K = B - I
	return A.dot(K)

lamda = input("Please enter lamda:")
print("A(B - lamda*I)")
print(cal(A,B,int(lamda)))
print()

用numpy自带的dot函数求解矩阵相乘,直接用+-即可运算矩阵加减,用A.T可以获得A的转置矩阵,在计算A(B−λI) 时,先生成一个全0矩阵,并将其对角线全部改为λ,即可得到λI矩阵,并先计算B-λI,然后计算A(B-λI)并返回。

测试结果如下:

A + A
[[-0.93290952  0.11019481 -0.88739111 ... -3.24536219 -0.00640075
  -3.51295293]
 [-2.54216005 -0.948385   -2.5321927  ... -0.80430053 -3.94296824
   0.51344509]
 [ 0.44858313  1.55170467  2.56375508 ...  0.9409022   0.85880548
   0.4397861 ]
 ...
 [-0.03560376 -0.20742415  1.34642852 ... -4.26780304 -2.35214412
   3.14066742]
 [ 0.58321291 -1.97103853  1.08835612 ... -2.28227805 -1.22670475
  -1.06074868]
 [-1.24780847 -0.43073939 -1.77104067 ... -2.71070791 -0.03139208
   0.2643324 ]]

AAT
[[ 4.73831798e+02 -2.73145209e+01 -1.86321643e+01 ... -2.45189925e+01
   1.93324230e+01  1.89429449e+01]
 [-2.73145209e+01  5.10813656e+02  4.50754786e+00 ...  1.41601265e+01
   3.12147358e+01 -2.80245717e+01]
 [-1.86321643e+01  4.50754786e+00  5.15084145e+02 ... -2.80358231e+01
  -2.61084965e+00 -5.59562840e+00]
 ...
 [-2.45189925e+01  1.41601265e+01 -2.80358231e+01 ...  5.60138111e+02
   2.56700007e+01 -5.20607186e+00]
 [ 1.93324230e+01  3.12147358e+01 -2.61084965e+00 ...  2.56700007e+01
   5.61079811e+02 -3.69722403e-01]
 [ 1.89429449e+01 -2.80245717e+01 -5.59562840e+00 ... -5.20607186e+00
  -3.69722403e-01  4.77874612e+02]]

ATA
[[141.85976751  -1.37748188   6.23704913 ...  17.07417478  16.53245544
    6.60919938]
 [ -1.37748188 192.45860272   7.5778256  ...  -6.24522753  -8.33951256
  -24.55672065]
 [  6.23704913   7.5778256  209.41993981 ... -32.13315932  10.12354298
    8.15289004]
 ...
 [ 17.07417478  -6.24522753 -32.13315932 ... 224.20565139 -10.4292083
   -0.42362958]
 [ 16.53245544  -8.33951256  10.12354298 ... -10.4292083  219.93915355
   -8.7888604 ]
 [  6.60919938 -24.55672065   8.15289004 ...  -0.42362958  -8.7888604
  202.17637431]]

AB
[[-10739.73252131 -10703.1428591  -10666.44300208 ...  -7991.06308131
   -8025.06629937  -8059.07591818]
 [   466.61912875    453.04545348    438.52339321 ...   5035.19088805
    5049.65192642   5060.16999655]
 [  -243.99852232   -236.28865979   -227.02709259 ...  -3377.64152038
   -3386.20139135  -3393.90245685]
 ...
 [ -1414.677483    -1420.2858834   -1426.10170794 ...   4199.43219573
    4204.21646907   4206.64859829]
 [  4614.3446591    4624.45634755   4632.59699746 ...  -9372.40215706
   -9379.64317917  -9388.11090603]
 [ 11515.12178368  11451.63066884  11387.70881461 ...  19544.7853632
   19606.79572924  19668.77470319]]

Please enter lamda:2
A(B - lamda*I)
[[-10738.79961178 -10703.25305391 -10665.55561097 ...  -7987.81771912
   -8025.05989863  -8055.56296525]
 [   469.16128881    453.99383848    441.05558591 ...   5035.99518857
    5053.59489467   5059.65655146]
 [  -244.44710545   -237.84036447   -229.59084767 ...  -3378.58242258
   -3387.06019683  -3394.34224295]
 ...
 [ -1414.64187924  -1420.07845924  -1427.44813647 ...   4203.69999878
    4206.5686132    4203.50793087]
 [  4613.76144619   4626.42738608   4631.50864134 ...  -9370.119879
   -9378.41647442  -9387.05015734]
 [ 11516.36959215  11452.06140824  11389.47985528 ...  19547.49607111
   19606.82712131  19668.51037079]]

Exercise 9.2: Solving a linear system Generate a vector b with m entries and solve Bx = b.

b = numpy.random.rand(m)
x = numpy.linalg.solve(B,b)
print("Bx = b")
print(x)
print()

直接使用numpy.linalg库里的solve函数即可求出Bx=b的解x

测试结果如下:

Bx = b
[ 4.15080782e-02 -4.17192995e-01  7.76762402e-01 -4.30703822e-01
 -3.37330622e-01  7.06654200e-01 -6.46064039e-01  6.09515907e-01
 -2.09004849e-01 -3.04955002e-01  4.14906299e-01 -5.92555496e-01
  4.08079581e-01  7.69404107e-02 -1.74459891e-01  2.00404143e-01
  7.28583094e-02 -1.09096081e-01 -1.34449300e-01 -8.01286946e-02
  2.05977561e-01 -8.19563745e-02  1.18598107e-01 -3.07305154e-01
  1.53556827e-01 -9.61491668e-02  1.93765085e-01 -1.57710965e-01
  5.54210788e-02  4.98823151e-01 -6.52776987e-01  4.61116262e-02
  1.41474407e-01  3.23791932e-01 -4.12850382e-01 -2.29883043e-01
  6.46976292e-01 -1.43299525e-01 -2.76620419e-01  1.76606443e-01
 -8.58644581e-02  6.16921725e-02 -1.58497266e-01  1.83396655e-02
 -1.02431025e-01  3.69441681e-01 -4.04576721e-01  1.92383843e-01
  6.87113197e-02 -2.62888030e-03  2.13870919e-01 -3.17423295e-01
 -1.48324399e-01  5.03020843e-01 -3.39905793e-01 -1.12019343e-01
  3.75823366e-01 -2.52359382e-02 -2.01535296e-01  7.98223292e-02
 -1.32755124e-01 -3.14314055e-02 -4.52249202e-02  4.41392077e-01
 -6.20264878e-01  2.90636852e-01  3.58547235e-01 -4.24037476e-01
  1.98276797e-01 -1.97723430e-01  2.20238120e-01 -3.21727601e-01
  6.14482660e-02  4.83342412e-01 -3.66100865e-01 -1.40409258e-01
  4.15236663e-02  3.05500449e-01 -3.86522740e-01  3.85660674e-01
 -3.25170714e-01  2.08825976e-01  2.60271916e-01 -4.91674022e-01
 -9.42889624e-02  4.17295095e-01 -5.46312058e-02  1.15053792e-01
 -3.29389910e-01  1.92668102e-01 -2.86593126e-01  4.37419339e-01
 -5.79691455e-01  2.92496659e-01  1.94084344e-01 -1.19210899e-01
  1.83617375e-01 -5.34232704e-01  5.34578771e-01 -2.20240393e-01
  4.04890564e-02  1.33133257e-01 -3.55610596e-01 -9.47166387e-03
  3.67645867e-01 -6.37596133e-03 -3.28906308e-01  4.92060875e-01
 -6.87678320e-01  3.73537379e-01  3.73343491e-01 -7.76868789e-01
  4.86813995e-01  5.79142613e-02 -2.40338926e-01  3.70769099e-01
 -2.89760968e-01 -6.69076296e-02  9.54428440e-02 -3.44115982e-01
  6.05133822e-01 -1.87372841e-01 -2.38212998e-01  2.09619675e-01
 -2.39403557e-01  2.55435272e-01  2.01777506e-01 -4.20216564e-01
  2.57963346e-01 -4.17820076e-02 -2.91887815e-01  1.32715476e-01
  1.55513721e-01 -2.32519063e-01  3.98206557e-01 -2.14266169e-01
 -1.20086144e-01  3.27486195e-01 -3.85403083e-01  4.36992398e-01
 -7.00398717e-01  6.56097541e-01 -2.56434401e-01 -1.69897990e-02
  2.51932100e-01 -2.10832013e-01  3.10077850e-02 -9.82960715e-02
 -1.92715984e-01  4.99863873e-01 -4.13947093e-01  3.47746323e-01
 -3.52360301e-01  3.21991403e-01  2.86323806e-02 -4.31613308e-01
  7.82829573e-02  5.00548612e-01 -6.50231926e-01  7.14930828e-01
 -5.26234754e-01  4.52331191e-02  3.84320619e-01 -4.09029871e-01
 -4.80945653e-02  1.75465600e-01  2.90676368e-01 -7.29061467e-01
  5.63169237e-01  1.91346292e-01 -6.20778631e-01  5.37982967e-01
 -3.84875817e-01  7.24257728e-02 -1.81962303e-02  6.63153828e-02
  2.95951627e-01 -2.99252463e-01 -6.25414795e-03  1.85709618e-01
 -2.09790785e-01 -2.98959489e-02  2.32068557e-02  2.00537263e-01
 -2.68260620e-01  7.02995841e-02  1.02498580e-01 -4.47624694e-02
  1.76954816e-01 -2.33415679e-01 -8.69971775e-02  2.33593121e-01
 -1.23019002e-01  3.48097745e-01 -6.22071521e-01  4.08014390e-01
 -1.01246376e-01  2.63477411e-01 -3.98016544e-01  2.71879958e-01
 -2.50952190e-01 -2.14307593e-01  6.22894737e-01 -4.30084595e-01
  4.34551816e-01 -4.32454667e-01  2.51303995e-01 -3.05440993e-01
  1.92205503e-02  5.85143799e-01 -4.32241754e-01 -3.88989646e-01
  5.79171028e-01  3.19910065e-02 -1.79332207e-01  4.65894063e-02
 -4.65357342e-02 -4.23231009e-01  7.09198906e-01 -5.57142721e-01
  2.92345898e-01  5.85325348e-02  6.81479412e-02 -3.45813798e-01
  7.07417349e-02 -1.25396363e-02  2.46402714e-01  9.04661277e-02
 -1.54132753e-01 -4.25139519e-01  7.25224767e-01 -7.86614874e-01
  5.35053685e-01  1.67594575e-01 -4.31414022e-01  3.18303474e-01
 -5.68461991e-01  4.56389986e-01 -8.40029619e-02 -1.56583056e-02
  3.47664172e-01 -1.67378248e-01 -3.30737812e-01  8.20512599e-02
  1.73941938e-01  1.49745226e-01 -4.89654698e-01  4.78717563e-01
 -8.58247286e-02 -5.13969883e-01  5.18606267e-01  1.25564691e-01
 -1.44377266e-01 -3.83345146e-01  1.88604951e-01  3.34430722e-01
 -5.28016830e-01  4.69997681e-01  5.05939842e-03 -3.11370310e-01
  6.42024145e-03  1.81713323e-04  2.22551329e-01  1.12544322e-01
 -1.33369377e-01 -4.96602417e-01  4.35510706e-01  3.60765252e-02
 -3.62502455e-02  1.36135819e-01 -2.91968902e-01  4.14108406e-01
 -7.20145187e-01  4.53255653e-01  4.29137058e-01 -8.12100155e-01
  6.01968488e-01 -3.30268269e-01 -1.14376553e-02  4.76247434e-01
 -8.25292817e-01  5.63896838e-01  9.47635297e-02 -3.67004753e-01
  3.13759957e-01 -5.47476330e-02 -4.26854027e-01  3.33474195e-01
  4.12996082e-01 -6.31089890e-01  3.43059878e-01 -2.27236335e-01
  2.31695737e-01 -4.58479803e-01  4.04409475e-01 -1.33251819e-01
  1.42929521e-01 -1.87083640e-01  2.03339318e-01  1.01991497e-01
 -3.95337891e-01  3.09600761e-01  1.22975283e-02 -3.34172395e-01
  3.03715644e-01  9.94408541e-02 -2.23004250e-01  2.36145419e-02
 -9.35011751e-02 -1.83913532e-01  6.85682136e-01 -5.74009709e-01
  1.88096438e-01  2.98072347e-02 -3.40869647e-01  4.10801400e-01
  1.46552372e-01 -5.57084477e-01  2.43202119e-01 -3.37661647e-02
  1.94445938e-01 -1.79814707e-01  4.46710420e-02  4.09834777e-01
 -8.03216258e-01  5.87079907e-01 -6.94321486e-02 -1.74945233e-01
  1.51210413e-01 -7.73712974e-02 -2.65805707e-01  5.07199276e-01
 -1.78717711e-01 -2.02357702e-01  2.71470964e-02  1.93031482e-01
 -1.94448162e-01  2.58667231e-01  1.11009441e-02 -4.70618146e-01
  4.96768645e-01 -3.68771738e-01  4.49958867e-01 -4.93253834e-01
  4.53945835e-01 -1.24214158e-01 -2.45791885e-01  2.99101410e-02
  3.45618724e-01 -4.14010066e-01  1.51080889e-01  1.36844359e-02
  9.12131815e-02  1.07094386e-01 -4.46874858e-01  3.81117915e-01
 -2.63127684e-01  1.21277029e-01 -3.96253552e-02  3.53179398e-01
 -5.93382682e-01  7.26137070e-01 -4.59414165e-01 -9.46429042e-02
 -7.89223308e-02  3.83514369e-01 -3.44216706e-01  3.54607792e-01
 -3.57211906e-01  4.51260477e-01 -3.31635691e-01 -1.19827173e-01
  3.33504336e-01 -1.62670647e-01  1.06498223e-01 -2.26101839e-01
  6.04608522e-02  4.43573846e-01 -4.36108044e-01 -2.26081709e-01
  1.46146031e-01  2.23147178e-01 -1.57837027e-01  4.14614101e-01
 -3.89427713e-01 -2.57740938e-01  6.94146001e-01 -4.87506278e-01
  2.09868810e-01 -1.00756769e-01 -4.05539382e-02  1.39097834e-02
 -1.92180837e-01  3.86370971e-01 -2.65915381e-02 -1.57906877e-01
 -3.09526403e-01  2.44039770e-01  1.76032967e-01 -8.71859623e-02
  8.66713210e-02 -3.56196873e-01  3.30137528e-01 -1.36746282e-01
  1.72301777e-01 -2.24204520e-01  3.76092721e-01 -3.24867792e-01
 -7.79619946e-02  7.93197843e-02  3.15733916e-01 -3.55243024e-01
 -9.41937234e-02  4.93521235e-01 -1.58020010e-01 -1.89699969e-01
 -3.32892125e-01  5.88506771e-01 -4.59381743e-02 -3.22279928e-01
 -5.95371188e-02  2.48742721e-01 -2.62396475e-02  3.59945867e-02
  9.37851477e-02 -2.24359843e-01 -1.78057149e-02  1.14940395e-01
  2.11252963e-01 -3.98666858e-02 -5.46364810e-01  6.33653131e-01
 -4.55890223e-01  2.75554000e-01 -1.09095958e-01  2.13227911e-01
 -3.04704852e-01  3.22348839e-01 -3.36250877e-01 -1.42882028e-01
  5.11224398e-01 -5.32845854e-01  6.32687126e-01 -4.39377233e-01
 -6.00718355e-02  2.49135223e-01  3.90313093e-02  7.35237320e-02
 -4.60786145e-01  2.77943661e-01 -9.93870282e-02  3.92381765e-01
 -5.18953744e-01  4.16553663e-01 -4.08059442e-01  1.18686055e-01
  2.12214596e-01 -4.51205034e-01  7.79943726e-01 -4.42815210e-01
 -2.29776836e-01  3.93551345e-01 -1.84904013e-01 -2.84395226e-01
  4.68371179e-01 -8.41150014e-02 -4.62193147e-01  7.12271133e-01
 -4.22653310e-01 -2.09797159e-01  4.62439286e-01  5.74647028e-02
 -3.28927824e-01  6.63701829e-02  1.22715560e-01 -2.91223423e-02
 -4.84645573e-02 -1.42460669e-01  3.31159422e-02  9.18782451e-02
  4.07340897e-02  3.63106994e-03  1.10727308e-01 -2.55372965e-01
 -1.99360836e-01  6.41380728e-01 -5.05990094e-01  3.51580738e-01
 -1.74020392e-01 -3.05790720e-01  4.66708038e-01 -2.89704915e-02
 -1.63385209e-01 -2.66822594e-01  1.35009204e-01  1.96345457e-01

  1.70521492e-01 -3.47994981e-02 -5.49456164e-01  3.70790242e-01]

Compute the Frobenius norm of A: kAkF and the infinity norm of B: kBk∞. Also find the largest and smallest singular values of B.

af = 0
for i in range(0,n):
	for j in range(0,n):
		num = A[i][j]
		af = af + num*num
print("||A||F")
print(af)
print()

b8 = 0;
for i in range(0,m):
	sum = 0
	for j in range(0,m):
		sum = sum + abs(B[i][j])
	if sum > b8:
		b8 = sum
print("||B||8")
print(b8)
print()

U,Sigma,V = numpy.linalg.svd(B)
print("The largest singular value of B")
print(max(Sigma))
print("The smallest singular value of B")
print(min(Sigma))
print()

根据个范数的定义求解A的Frobenius norm 和B的infinity norm。当然这里可以用

print(nummpy.linalg.norm(A,ord='fro'))
print(numpy.linalg.norm(B, np.inf))

直接求解

用numpy.linalg库的svd函数进行奇异值分解,并用max和min函数找出奇异向量的最大值和最小值。

测试结果如下:

||A||F
39894.97827887025

||B||8
125250.0

The largest singular value of B
87334.52045641869
The smallest singular value of B

0.5000049348346853

Exercise 9.4: Power iteration Generate a matrix Z, n × n, with Gaussian entries, and use the power iteration to find the largest eigenvalue and corresponding eigenvector of Z. How many iterations are needed till convergence?

Optional: use the time.clock() method to compare computation time when varying n.

Z = numpy.random.normal(size = (n,n))
v = numpy.ones((n,1))

def geteig(A, v, eps=1e-6, N=1e8):
    count = 1

    y = v/v[numpy.argmax(numpy.abs(v))]

    x = numpy.dot(A, v)
    b = x[numpy.argmax(numpy.abs(x))]
    if (numpy.abs(x/b - y) < eps).all():
        t = b
        return (t, y, count)
    while (numpy.abs(x/b - y) > eps).any() and count < N:
        count = count+1
        m = x[numpy.argmax(numpy.abs(x))]
        y = x/m
        x = A.dot(y)
        b = x[numpy.argmax(numpy.abs(x))]
    return (b, y, count)

e,vector,count = geteig(Z,v)
print("largest eigenvalue")
print(e)
print("corresponding eigenvector")
print(vector)
print("count")
print(count)
print()

通过递归函数模仿幂迭代法来求解特征值和特征向量,并用count变量进行计数,由于迭代次数跟矩阵的大小n有关,当n太大时,有可能出现难以求解的情况。

测试结果如下:

largest eigenvalue
[-14.65592497]
corresponding eigenvector
[[-3.72933592e-02]
 [-1.17288791e-01]
 [-7.32156675e-02]
 [ 4.81757088e-01]
 [-2.04864796e-01]
 [-1.61292997e-01]
 [ 2.75663353e-02]
 [-5.06419837e-02]
 [-1.72525770e-01]
 [ 7.77619899e-01]
 [ 1.90342465e-01]
 [-3.79213292e-01]
 [ 4.35526758e-01]
 [ 5.99618972e-03]
 [-2.19225032e-01]
 [ 2.62727265e-01]
 [-3.42584611e-01]
 [-6.04512397e-01]
 [-3.76835278e-01]
 [-6.87914418e-01]
 [-1.47341417e-01]
 [ 1.74325553e-01]
 [-2.14264858e-02]
 [-1.23359198e-01]
 [-1.56501165e-01]
 [-2.57491910e-01]
 [ 2.85718856e-01]
 [-2.20324611e-01]
 [ 1.19843062e-01]
 [ 1.66470105e-01]
 [ 8.25287189e-03]
 [-3.72541209e-01]
 [-5.92522176e-04]
 [-1.72317507e-01]
 [-1.07292439e-01]
 [ 1.44860289e-02]
 [-3.52924945e-01]
 [-2.07662882e-01]
 [ 2.85233760e-01]
 [ 3.33862889e-02]
 [-3.66384626e-01]
 [ 2.91302937e-02]
 [-6.82695081e-02]
 [ 1.83632116e-01]
 [ 4.35919075e-03]
 [ 1.92127114e-01]
 [-2.49377821e-01]
 [-4.02470145e-01]
 [ 2.29062357e-02]
 [-3.72347255e-01]
 [ 8.81623702e-02]
 [ 1.04560171e-01]
 [ 4.65754726e-02]
 [-3.56322672e-01]
 [-2.53219406e-01]
 [ 1.78902565e-01]
 [ 5.79043376e-02]
 [-2.17278896e-01]
 [ 2.37464113e-02]
 [-1.71682653e-01]
 [ 2.36021006e-02]
 [-2.33572205e-01]
 [-1.43780660e-01]
 [ 5.85989943e-01]
 [ 7.87011626e-02]
 [ 1.89865536e-02]
 [ 1.18145418e-01]
 [ 2.14846712e-01]
 [-4.01373175e-03]
 [ 3.33561384e-01]
 [-6.32152421e-03]
 [-1.25367666e-02]
 [-2.41675912e-01]
 [-2.17339135e-01]
 [-8.48210867e-02]
 [-3.02995875e-01]
 [ 2.58514575e-01]
 [ 1.00000000e+00]
 [ 4.31991885e-01]
 [ 4.31829394e-01]
 [-2.37907130e-01]
 [-2.66693825e-01]
 [ 9.31110689e-02]
 [ 2.89966016e-02]
 [-2.26300274e-01]
 [ 1.12810442e-01]
 [-6.25872368e-02]
 [ 7.05731360e-03]
 [-2.63770382e-01]
 [-1.89930953e-01]
 [-2.21644849e-02]
 [ 8.19496953e-01]
 [-3.27874720e-01]
 [-3.73080318e-01]
 [-5.72671326e-01]
 [ 1.34764056e-01]
 [ 5.02760053e-01]
 [ 4.17894554e-01]
 [ 1.12261296e-01]
 [ 3.08073324e-02]
 [-1.93601220e-02]
 [ 1.10016693e-01]
 [-2.86203958e-01]
 [-2.07430608e-01]
 [ 6.78689298e-01]
 [ 1.68940084e-01]
 [ 5.88203057e-01]
 [ 4.05728785e-01]
 [-7.49938483e-02]
 [-4.06130562e-02]
 [-3.57057973e-01]
 [ 2.19345277e-01]
 [-4.90365027e-02]
 [-3.89085601e-01]
 [ 1.78545517e-01]
 [-9.71531828e-02]
 [ 8.13100189e-02]
 [ 5.23354625e-02]
 [ 1.85986258e-01]
 [ 1.59036387e-01]
 [-5.57817512e-02]
 [-6.15371482e-01]
 [ 6.70599272e-02]
 [-2.25242702e-01]
 [-2.26857050e-01]
 [ 9.35116219e-02]
 [-4.23534375e-01]
 [-5.08500899e-01]
 [ 8.32602957e-02]
 [-2.58524357e-01]
 [ 2.70108960e-01]
 [-6.43369102e-02]
 [-5.20856054e-02]
 [-1.49660157e-01]
 [ 2.27316080e-01]
 [-1.41083832e-01]
 [ 8.99505881e-02]
 [ 3.04771905e-01]
 [-4.60934034e-01]
 [-4.18970572e-01]
 [ 2.46838504e-01]
 [-2.95504404e-02]
 [-3.12803455e-01]
 [ 9.36781071e-02]
 [ 2.41584445e-02]
 [-4.69115975e-02]
 [-4.19172674e-01]
 [-1.82818726e-01]
 [ 9.61754798e-02]
 [-1.29051457e-01]
 [ 3.59894584e-01]
 [ 3.34920638e-01]
 [-5.43126051e-02]
 [ 2.96315159e-01]
 [-3.40777898e-01]
 [ 2.97096882e-01]
 [ 2.37625644e-02]
 [ 3.28011840e-01]
 [ 1.59917306e-01]
 [-2.08979017e-01]
 [-2.47003053e-01]
 [-1.46087923e-01]
 [ 6.40605589e-01]
 [ 4.82673367e-01]
 [ 2.79210555e-01]
 [-3.76604941e-02]
 [ 1.21852362e-01]
 [ 2.57714312e-01]
 [ 5.87355224e-02]
 [-5.97778921e-01]
 [ 4.60268375e-01]
 [-1.44442316e-02]
 [ 6.73693394e-01]
 [-4.36348559e-01]
 [ 3.20445729e-01]
 [ 1.08131534e-01]
 [ 3.60252128e-02]
 [ 5.82660344e-02]
 [ 7.53822617e-02]
 [-9.41061090e-02]
 [-4.02279425e-01]
 [ 4.28789275e-02]
 [-1.58517938e-01]
 [-4.21413094e-01]
 [-4.27567760e-01]
 [ 3.54318899e-01]
 [-1.49107234e-01]
 [-3.66565583e-02]
 [ 3.47640542e-01]
 [ 3.01288673e-01]
 [ 1.76116212e-01]
 [-2.57094105e-01]
 [ 9.01859600e-02]
 [-3.08293583e-02]
 [-8.96253233e-02]
 [-1.54716385e-01]
 [ 9.70298937e-02]
 [ 6.74476047e-02]
 [-1.47202591e-01]
 [ 6.10407187e-01]]
count

1387

Exercise 9.5: Singular values Generate an n×n matrix, denoted by C, where each entry is 1 with probability p and 0 otherwise. Use the linear algebra library of Scipy to compute the singular values of C. What can you say about the relationship between n, p and the largest singular value?

C = numpy.where(numpy.random.random((n,n)) < p, 1, 0)
U,Sigma,V = scipy.linalg.svd(C)
print("n")
print(n)
print("n*p")
print(n*p)
print("max(Sigma)")
print(max(Sigma))

使用scipy.linalg库里的svd库求解出矩阵C的奇异向量,并max出最大的奇异值,经过计算发现最大奇异值和n*p的值非常接近。

测试结果如下:

n
200
n*p
100.0
max(Sigma)
100.79375610999118

Exercise 9.6: Nearest neighbor Write a function that takes a value z and an array A and finds the element in A that is closest to z. The function should return the closest value, not index.

Hint: Use the built-in functionality of Numpy rather than writing code to find this value manually. In particular, use brackets and argmin.

def findNearestneib(A,z):
	n,m = A.shape
	index = numpy.argmin(numpy.abs(A-z))
	return A[index//n,index%m]

neib = findNearestneib(B,400.5)
print("The nearest neighbor")
print(neib)

通过将矩阵A的每一个元素与z相减,并找出绝对值最小的那个值(即最接近)的索引,并通过索引返回该值。

测试结果如下:

The nearest neighbor
400.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值