python课程作业——numpy

这里写图片描述

以下是用jupyter notebook导出markdown格式的文件,对应输入输出。。

import numpy as np
from scipy.linalg import toeplitz

n = 200
m = 500
A = np.random.randn(n, m)
B = toeplitz(np.arange(m))
I = np.eye(m,m)

print(A)
print(B)
[[-0.86046243  0.30115977  0.73137673 ...  0.26170828  0.03007832
   0.28088492]
 [-1.56096201  0.38153494  0.94719265 ...  0.4708248   0.75180722
   0.71232127]
 [ 1.42251073 -0.39533632 -0.94342822 ...  1.78528343 -0.4857231
   1.5061549 ]
 ...
 [ 1.05913795  0.99815423 -0.58212395 ...  0.78615985  1.7645259
  -0.38811833]
 [-0.04473702 -1.32534125 -1.04852523 ...  1.6435978  -0.83361505
   0.74616691]
 [ 0.92317299 -1.74689381  0.00678095 ... -0.14099563 -0.63853128
   1.33323736]]
[[  0   1   2 ... 497 498 499]
 [  1   0   1 ... 496 497 498]
 [  2   1   0 ... 495 496 497]
 ...
 [497 496 495 ...   0   1   2]
 [498 497 496 ...   1   0   1]
 [499 498 497 ...   2   1   0]]
# 9-1
print(A+A)
print(A.dot(A.T))
print(A.T.dot(A))
print(A.dot(B))
def fun(lam):
    return A.dot(B-lam*I)
print(fun(0))
[[-1.72092486  0.60231954  1.46275347 ...  0.52341655  0.06015663
   0.56176985]
 [-3.12192403  0.76306988  1.8943853  ...  0.94164959  1.50361443
   1.42464254]
 [ 2.84502146 -0.79067263 -1.88685644 ...  3.57056685 -0.9714462
   3.0123098 ]
 ...
 [ 2.11827591  1.99630846 -1.16424789 ...  1.5723197   3.5290518
  -0.77623667]
 [-0.08947404 -2.6506825  -2.09705046 ...  3.2871956  -1.6672301
   1.49233382]
 [ 1.84634599 -3.49378763  0.0135619  ... -0.28199127 -1.27706257
   2.66647472]]
[[ 4.60459662e+02 -6.59171865e+00  2.31387015e+01 ... -3.14030630e+01
   3.13833163e+01  1.72963541e+01]
 [-6.59171865e+00  4.75035650e+02 -4.67409024e-01 ... -3.15015782e+01
   1.71846976e+01 -1.58875658e+01]
 [ 2.31387015e+01 -4.67409024e-01  5.06260314e+02 ...  7.58211265e+00
  -6.48590504e+00 -3.49405038e+01]
 ...
 [-3.14030630e+01 -3.15015782e+01  7.58211265e+00 ...  5.00322332e+02
   5.55502279e+00 -1.51972999e+01]
 [ 3.13833163e+01  1.71846976e+01 -6.48590504e+00 ...  5.55502279e+00
   4.53036925e+02  1.58968613e+01]
 [ 1.72963541e+01 -1.58875658e+01 -3.49405038e+01 ... -1.51972999e+01
   1.58968613e+01  4.98077903e+02]]
[[170.60024071  -8.19664975  -1.39613034 ...   6.81915464 -19.16736005
   20.48386654]
 [ -8.19664975 190.65199199 -30.79685959 ... -12.60684667   6.52993606
  -32.76131853]
 [ -1.39613034 -30.79685959 239.94280849 ...  18.08559623  -5.27976432
   12.776076  ]
 ...
 [  6.81915464 -12.60684667  18.08559623 ... 189.20155784 -12.97770174
   12.90892766]
 [-19.16736005   6.52993606  -5.27976432 ... -12.97770174 185.2300201
   -5.7624913 ]
 [ 20.48386654 -32.76131853  12.776076   ...  12.90892766  -5.7624913
  218.03749133]]
[[ -8204.15088328  -8167.43167144  -8130.11014006 ... -10899.41336217
  -10938.47542536 -10977.47733191]
 [ -6252.27445976  -6216.85303327  -6180.66853689 ... -12899.41784739
  -12940.88945487 -12980.85744793]
 [ -9164.24925645  -9133.76879228  -9104.07900074 ...  -4565.5125987
   -4595.18890501  -4625.83665752]
 ...
 [ -7666.18699282  -7641.96393659  -7615.74457189 ...  -3317.91225014
   -3342.76984559  -3364.09838925]
 [ 11476.21643174  11441.38716755  11403.90722085 ...   5790.77671421
    5825.69140064   5858.93885698]
 [-14116.77221181 -14073.26792173 -14033.25741927 ...  -6583.17011629
   -6626.21747254  -6670.54189135]]
[[ -8204.15088328  -8167.43167144  -8130.11014006 ... -10899.41336217
  -10938.47542536 -10977.47733191]
 [ -6252.27445976  -6216.85303327  -6180.66853689 ... -12899.41784739
  -12940.88945487 -12980.85744793]
 [ -9164.24925645  -9133.76879228  -9104.07900074 ...  -4565.5125987
   -4595.18890501  -4625.83665752]
 ...
 [ -7666.18699282  -7641.96393659  -7615.74457189 ...  -3317.91225014
   -3342.76984559  -3364.09838925]
 [ 11476.21643174  11441.38716755  11403.90722085 ...   5790.77671421
    5825.69140064   5858.93885698]
 [-14116.77221181 -14073.26792173 -14033.25741927 ...  -6583.17011629
   -6626.21747254  -6670.54189135]]
# 9-2
b = np.random.randn(500)
x = np.linalg.solve(B, b)
print(x)
print(np.allclose(B.dot(x), b))    # check
[ 0.34156541 -0.59838842 -0.69863765  2.2177078  -1.71426284  0.60160113
 -0.08123093 -1.04514497  2.14338057 -2.08471981  1.05511105 -0.20720298
  0.89899909 -0.60645555 -0.94114286  0.94843828 -0.48530495  0.59849954
 -1.66829446  2.4068125  -1.00505613  0.60751204 -1.72928608  0.79343925
  0.41611878  0.63381989 -1.26655123  1.11008529 -1.64580294  1.34150019
  0.32939085 -1.1707536   0.28755129  0.96087753 -2.5846774   3.85138366
 -3.75157578  3.24681493 -2.64312385  1.37100932 -0.16829174  0.85135533
 -1.12659886 -0.28634517  0.33425479  0.84053004 -1.71859535  1.84786072
  0.02592074 -2.38383254  1.15815998  1.46766007 -1.21097662 -0.10277406
  0.03385079  0.32526459 -0.51024767  0.71506732 -0.43330118  0.1266056
  1.09764117 -0.97467138 -1.14903006  1.14529311 -0.53371147  1.01207679
 -0.62693187 -0.86464203  1.51124958 -0.44554219 -0.30136711  0.44769874
 -1.18758408  1.27179077 -1.03151862  1.83372289 -2.07292541  1.63531945
 -2.05744442  3.18552611 -2.39434895 -0.15261197  0.1673338   0.93126758
 -0.36292824  0.53265032 -1.57366496  1.1018216  -0.31415441 -0.02281922
 -0.09144119  0.28021082  1.59001906 -2.90065869  1.05735563  1.04200832
 -0.66691729 -1.07279425  1.59373299 -0.78270436 -0.5727265   1.86466217
 -1.00444168 -0.02852198 -1.03296517  0.51421067  0.20451499  1.55369215
 -1.82077108  0.54800507 -0.28200318 -0.5438969   0.27557521  1.80935781
 -2.14768322  1.26393372 -0.27069527  0.25546978 -0.22643729 -1.21849322
  1.61825702 -1.10981389  0.12673486 -0.28443505  1.43262434 -1.01156838
  1.48676287 -2.11283902  1.92083208 -2.29529317  1.22435558  0.75626661
 -1.61366276  0.32675002  1.58826808 -2.77256675  2.77471106  0.12608803
 -1.69317745  0.15528647 -0.16552686  0.87617642  0.9412579  -2.10132217
  0.56074985 -0.5035707   1.26104461 -1.30152423  1.54262041 -0.50001849
 -0.47689514 -0.43812624  1.75884911 -1.97557151  1.7107997  -0.72248803
 -1.41766538  1.3380366  -0.33069671  1.41300331 -1.81611232  1.0839304
 -0.76684084 -0.03746894  0.70180032 -0.12425946  0.27703459 -0.79256402
  0.2942678   0.26365155  0.724171   -1.76027033  0.58378426  0.99667549
 -1.04845587  0.18146377  0.37403325  0.24948489 -1.86077324  1.86206855
 -0.85995219  0.16231458  0.3294451   0.85943916 -2.37634141  2.72029256
 -1.58247721 -0.72601986  1.28565597 -0.43521297 -0.22721467  1.44715012
 -2.17588492  1.90828257 -1.03033663  0.68898799 -1.55821097  1.39380052
  0.37822104 -0.85513248  0.24800903 -1.67969958  1.87618123  0.32405252
 -1.12950766  1.28559676 -0.45388576 -0.68435023  0.49162092 -0.67399739
  0.59267946  0.52306441 -1.28661392  0.69061397  0.11734533  0.72018065
 -1.32241079  0.47826178 -0.1683024   0.1657361  -0.95947288  2.46997163
 -2.27095878  1.36270791 -0.97158302  0.86671583 -0.84554801  0.56790126
 -0.74263289  1.29768637 -0.75824043 -0.86856369  2.0577082  -2.57463695
  2.65963398 -2.0424014   0.27490446  1.09719302 -1.31210679  0.98256303
  0.21968835 -1.36111269  1.12553232 -0.04150628  0.17689491  0.36515181
 -0.87380163  0.28402759 -1.42818975  2.19754095 -1.05025559 -0.40864136
  1.46398915 -2.78862308  3.15084386 -1.90468811  0.86304183  0.12462147
 -0.6445501   0.59540538 -0.44205218  0.52894962 -1.04537404  0.47625821
 -0.08558042  0.59253998 -0.40127618 -0.55490411  2.28608448 -2.84482747
  1.42320585 -0.30907979 -0.04704665  0.12860309  0.20052449 -0.80062343
  0.74430056 -0.10058188  1.19504991 -2.35200754  0.66756646  0.84339104
  0.05561061 -1.49399372  1.97069584 -0.77992049 -1.2368819   1.54595754
 -0.28822676 -0.30750473 -0.48653863  0.59152563 -0.53123406  1.64120531
 -0.87343746 -0.82325915  0.62989691 -0.29676138 -0.08836218  0.17371301
  0.92016565 -1.21696181  0.7660736   0.13310717 -0.81374741  0.54431283
  0.54761566 -1.96120495  3.06339999 -2.99819699  0.94614857  0.58584985
 -0.19731397 -0.79435174  0.93653047  0.10940575 -1.48536626  1.41680161
  0.31327767 -1.5246428   1.12500351 -0.70645974  0.8689473   0.40946218
 -1.19283247 -0.51411542  2.22020469 -2.24801049  0.75015751  0.80907955
 -0.95853305  0.12834143  0.5540963   0.11266835 -1.04432941  0.84748076
  0.20440754 -1.12818634 -0.60869005  2.50200539 -1.33300852 -0.72406018
  1.26197374  0.59164594 -1.26014457 -0.46873745  0.35278827  0.07985866
  1.20769344 -1.57427533  1.51552836 -1.48519798 -0.36287936  1.34612422
 -0.60704704  1.30322825 -2.09940237  1.3863973  -0.47202322  0.17909836
 -0.06890619 -0.21596016  0.17573463  0.92467198 -2.28371087  2.29240573
 -0.99654663  0.62410581 -1.16613899  0.89222017 -1.3880017   1.59308222
 -0.76642739  0.31914961 -0.09640893  0.72454576 -0.80262885  0.1008478
  0.35081987 -0.39803588 -0.04157775 -0.08484636  0.13570158 -0.11885937
  0.92271176 -0.61531847 -0.68571162  0.48434694 -0.13312036  0.57188953
 -0.04983478 -1.09893481  1.15981017  0.07785162 -0.35689982 -0.13793172
 -0.0859432   0.35998497 -0.87159269  0.93467795 -0.29132943 -0.24723649
  0.64096142 -0.92523922  1.72201109 -0.88758178 -0.97808984  0.29402766
  0.9526518  -1.41445898  1.27659955  0.80928613 -2.69915548  1.6570517
  0.44466239 -0.53517067 -0.55305986 -0.56906744  2.3080095  -1.91969374
  0.9355004  -0.68893124  0.98384874 -0.69804771 -0.01476748 -0.06828982
  0.53112868 -0.94873461  0.81580113  0.51792077 -1.58925903  0.68281108
  0.46225461  0.39894184 -0.90008877  1.18416752 -2.15054551  0.9424066
 -0.14136498  1.33351003 -0.75798717 -0.1497655  -0.05779486 -0.47484991
  0.94803235 -1.23221039  2.08106185 -1.95534483  1.3507371  -1.68410281
  0.84112932  1.32121073 -1.90407103  0.08724138  0.86016286 -0.70329233
  1.09461422 -0.43226226 -0.32475256 -0.15993829 -0.11870966  1.11335928
 -0.51219893 -0.71788966  0.50782006  0.2772903   0.16786915 -1.58141178
  1.26896427  0.27966826  0.10183574 -0.63971546 -0.61032516  2.37414098
 -2.56170124  0.73343449  0.20452039  0.28970971  0.2477083  -1.50345518
  1.4857238   0.35757928 -2.12810549  1.14136917  0.33936083 -0.60409897
  0.20117627  0.78019123  0.02266318 -0.27147872 -1.3211046   1.23120002
  0.34209622 -1.05168774  0.75206611 -1.90056586  2.87815662 -1.11732534
 -0.37247911  0.21515434]
True
# 9-3 reference: https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.norm.html
print(np.linalg.norm(A, 'fro'))
print(np.linalg.norm(A, np.inf))
print(np.linalg.norm(A, 2))
print(np.linalg.norm(A, -2))
316.56386025354055
435.5489884442428
35.850460172919504
8.471309496868875
# 9-4 reference: 幂法求矩阵特征值
import time

Z = np.random.randn(n, n)
i = 0
x0 = np.random.randn(n)
eg_val = x0.max()
time.clock()
while True:
    i += 1
    x1 = Z.dot(x0/np.linalg.norm(x0, np.inf))
    if (i % 100000 == 0):
        print(str(i) + ': ')
        print('time elapsed:', time.clock())
    if i >= 1000000:
        break
    x0 = x1

p = abs(x0).argmax()
eg_val = x0[p]
eg_vec = x0
if np.sign(Z.dot(eg_vec)[0]) != np.sign((eg_vec*eg_val)[0]):
    eg_val = -eg_val

print('eigenvalue:', eg_val)
print('eigenvector:', eg_vec)
print(np.allclose(Z.dot(eg_vec), eg_vec*eg_val))    # check
100000: 
time elapsed: 2.392553391416248
200000: 
time elapsed: 4.732322869466335
300000: 
time elapsed: 7.509598828667907
400000: 
time elapsed: 9.774808432203704
500000: 
time elapsed: 12.394506673329792
600000: 
time elapsed: 14.865820256301449
700000: 
time elapsed: 17.533920179111597
800000: 
time elapsed: 19.818027670137084
900000: 
time elapsed: 22.317430430921807
1000000: 
time elapsed: 25.057974497266148
eigenvalue: 159.67787537864638
eigenvector: [-133.27047541 -132.07675892 -135.42763323 -143.82592622 -145.59219875
 -138.82176242 -142.07717836 -148.71893325 -133.80947043 -136.15495259
 -138.40519322 -129.49815909 -135.40523796 -127.40299559 -144.09944191
 -134.090092   -144.81126072 -143.21448892 -138.30883305 -138.13196031
 -154.36611658 -149.45213647 -133.78913303 -137.31694006 -148.12920738
 -148.08051919 -131.93034717 -139.1166509  -129.36582657 -154.11459685
 -138.282479   -159.60026881 -131.37100226 -139.35434498 -142.71486057
 -139.99887526 -134.51948153 -141.0598257  -141.98166005 -147.33578259
 -119.39896101 -140.3912796  -144.98086469 -130.61040892 -129.55983272
 -135.27741055 -129.22162844 -140.55279415 -133.96728903 -134.56884208
 -144.08389743 -125.32917507 -145.26479187 -139.58469611 -133.0839744
 -144.46422719 -145.72859237 -143.27092189 -139.76122198 -142.96765274
 -125.92252696 -153.47358713 -129.65917363 -143.55497279 -127.83450405
 -139.95426539 -135.64666443 -141.19063254 -138.31472799 -141.70528609
 -136.80576913 -145.52082367 -148.81525734 -131.90587635 -148.30507163
 -128.27782509 -137.15612526 -140.05196517 -131.16185209 -135.24931166
 -146.7640153  -133.14396727 -137.85752579 -141.41762351 -134.53573354
 -131.05627498 -136.03304894 -141.7171628  -134.90927391 -155.267524
 -144.49229456 -137.43658998 -131.38200372 -159.67787538 -139.34079184
 -133.58986438 -142.09415573 -130.4890389  -144.27222734 -130.9139107
 -140.40107295 -133.81618319 -140.60770616 -135.77196403 -140.28016087
 -127.33284859 -142.84197628 -134.17198991 -147.87267942 -134.20535298
 -142.01474009 -140.42875143 -129.22655162 -142.15638879 -143.51674631
 -137.6231031  -134.42239258 -138.25230686 -137.71264975 -122.33046015
 -135.20184    -131.37893062 -135.0014697  -144.55558495 -137.8834151
 -133.28595353 -151.07548826 -131.16362988 -154.32568021 -143.09134699
 -134.9553581  -133.92043463 -145.08353437 -136.52936238 -141.77132278
 -145.67337092 -128.59886631 -129.69456688 -138.54306417 -122.24447355
 -142.72351261 -139.17953718 -132.17995279 -138.14181359 -155.77121847
 -133.31327788 -157.13479209 -134.67695868 -140.03344515 -136.78166528
 -127.29915461 -131.78077196 -115.27653478 -139.74671557 -121.08503485
 -137.37741294 -142.46535739 -127.00832012 -140.17569647 -138.60102044
 -146.3800391  -143.99432441 -136.43782797 -139.39783853 -140.99009259
 -138.27283092 -143.0696287  -146.34751102 -147.51727354 -140.90943192
 -133.90686814 -135.49977119 -152.42008952 -143.09779178 -144.0304898
 -141.50504215 -137.27914146 -154.10798986 -143.11683145 -128.6967144
 -148.55678493 -153.68637893 -146.78752608 -142.84912717 -139.31775588
 -133.85781745 -145.42537207 -122.89724662 -141.38523673 -131.76941123
 -143.11557596 -124.88362722 -135.6092054  -150.54712297 -140.56610842
 -137.07495025 -139.35542647 -138.82059026 -138.92480201 -133.88103571]
True
# 9-5 reference: https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.svd.html
from scipy.linalg import svd

p = 1/3
C = np.random.binomial(1, p, (n, n))
U, s, Vh = svd(C)
print("Max SVD: ", s.max())
print("n * p:", n * p)
print("They are similar.")
Max SVD:  67.07797984662372
n * p: 66.66666666666666
They are similar.
# 9-6
def find_nearest_neighbour(A, x):
    return np.argmin(abs(A-x))

A, x = np.arange(n), np.random.rand()*n
print('A =', A)
print('x =', x)
p = find_nearest_neighbour(A, x)
print('p =', p)
print('A[p] =', A[p])
A = [  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35
  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53
  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71
  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89
  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107
 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
 198 199]
x = 43.14580348128545
p = 43
A[p] = 43
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值