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

被折叠的 条评论
为什么被折叠?



