All language subtitles for 152 - Linear algebra BUG HUNT English

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified) Download
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (SoranĂ®)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:03,360 --> 00:00:10,530 ‫I know you are excited because you've been looking forward to this bug hunt for the entire section on 2 00:00:10,530 --> 00:00:14,790 ‫linear algebra, so here we go, if you haven't already. 3 00:00:15,090 --> 00:00:22,500 ‫Now is the time to pause the video, go through all of this code and find and fix all of the bugs. 4 00:00:22,830 --> 00:00:23,370 ‫All right. 5 00:00:23,370 --> 00:00:31,050 ‫So I can already see that we are going to need to start by importing some modules and special functions. 6 00:00:31,360 --> 00:00:32,910 ‫So let's see. 7 00:00:33,450 --> 00:00:44,160 ‫We will need import numpty as and P, we will need import simpy as SIM and we will need to import from 8 00:00:44,550 --> 00:00:51,390 ‫AI Python that display the display and math functions. 9 00:00:51,810 --> 00:00:52,920 ‫Possibly we will need. 10 00:00:52,920 --> 00:00:55,610 ‫Oh we will definitely need matplotlib now I see it here. 11 00:00:55,950 --> 00:01:04,260 ‫So also import matplotlib dot pi plot as p l t.. 12 00:01:04,770 --> 00:01:05,300 ‫All right. 13 00:01:05,310 --> 00:01:08,670 ‫I think that's probably all of the modules that we will need. 14 00:01:09,030 --> 00:01:09,520 ‫Let's see. 15 00:01:09,540 --> 00:01:11,700 ‫Create a column vector and then. 16 00:01:11,700 --> 00:01:15,720 ‫Oh this is a lot of complicated embedded functions here. 17 00:01:16,200 --> 00:01:17,430 ‫Let's just see what happens. 18 00:01:17,510 --> 00:01:17,850 ‫Hmm. 19 00:01:18,390 --> 00:01:18,770 ‫All right. 20 00:01:18,780 --> 00:01:24,090 ‫So first of all, this looks a little awkward to have these double square brackets here, but this is 21 00:01:24,090 --> 00:01:26,120 ‫also clearly not a column vector. 22 00:01:26,130 --> 00:01:27,780 ‫It's supposed to be a column vector. 23 00:01:28,650 --> 00:01:35,610 ‫Well, what's going on here is that each row in The Matrix, when you specify a matrix using numpad 24 00:01:35,790 --> 00:01:39,540 ‫array, each row needs to be in its own square brackets. 25 00:01:39,570 --> 00:01:46,250 ‫So this needs to be in a square bracket and the three needs to be in a square brackets. 26 00:01:46,260 --> 00:01:50,130 ‫So and those other parentheses, I think we're just there to confuse us. 27 00:01:50,640 --> 00:01:56,580 ‫So there we go, each row in its own square bracket and then the entire matrix is in a set of square 28 00:01:56,580 --> 00:01:59,010 ‫brackets that gives us a column vector. 29 00:01:59,880 --> 00:02:00,440 ‫All right. 30 00:02:00,870 --> 00:02:04,550 ‫Visualize scalar vector multiplication. 31 00:02:04,590 --> 00:02:04,980 ‫Let's see. 32 00:02:04,990 --> 00:02:07,920 ‫I'm just going to run this and we get an error. 33 00:02:08,490 --> 00:02:11,220 ‫Now, this one is a bit tricky, actually. 34 00:02:11,230 --> 00:02:14,790 ‫So we say the error message claims to be on this line. 35 00:02:15,810 --> 00:02:21,590 ‫And if you look at the error message itself, it says string object is not callable. 36 00:02:21,960 --> 00:02:23,000 ‫So what is going on here? 37 00:02:23,010 --> 00:02:25,470 ‫There are actually no strings in this line. 38 00:02:26,100 --> 00:02:27,620 ‫So this is really tricky. 39 00:02:27,630 --> 00:02:34,500 ‫The mistake here, the the error actually happens on this line of code and what I'm doing wrong here. 40 00:02:34,530 --> 00:02:40,620 ‫Well, you know, I whoever wrote this code, the terrible programmer who wrote this code, what they're 41 00:02:40,620 --> 00:02:43,650 ‫trying to do is set the access to be square. 42 00:02:44,250 --> 00:02:49,330 ‫But in fact, what they've done is set the axis as a variable to be string. 43 00:02:50,040 --> 00:02:59,250 ‫So what we need to do is put this in parentheses like this, except now we still actually get this error. 44 00:02:59,460 --> 00:03:06,670 ‫And basically what's happened here is we've just done some real fundamental damage to access by setting 45 00:03:06,670 --> 00:03:09,210 ‫it equal to the string is square. 46 00:03:09,570 --> 00:03:16,050 ‫And, you know, sometimes when you really get your python code all caught up in a bundle, it's good 47 00:03:16,050 --> 00:03:17,450 ‫just to restart everything. 48 00:03:17,460 --> 00:03:22,190 ‫So I'm going to select Col up here and restart it. 49 00:03:22,200 --> 00:03:23,970 ‫It says, Are you sure you want to restart? 50 00:03:23,970 --> 00:03:25,800 ‫All the variables will be lost. 51 00:03:26,100 --> 00:03:30,500 ‫Now, sometimes that's problematic, but it's no problem here. 52 00:03:30,720 --> 00:03:37,110 ‫All we need to do is rerun this cell here to re-import all of these modules. 53 00:03:38,210 --> 00:03:40,920 ‫OK, and then I'm going to go back and rerun this. 54 00:03:41,270 --> 00:03:46,370 ‫So now the plotting part looks good, but the legend doesn't quite look right. 55 00:03:46,370 --> 00:03:48,390 ‫So I don't know what this percent is doing here. 56 00:03:48,410 --> 00:03:52,780 ‫This is actually just Vector V here in Red and S.V.. 57 00:03:52,790 --> 00:03:55,180 ‫So I think we don't even need that percent sign. 58 00:03:55,660 --> 00:03:59,860 ‫OK, now let's look at what's happening here just to make sure that we're doing the right thing. 59 00:04:00,080 --> 00:04:06,800 ‫So we have this vector here, minus two to that is minus two comma to not minus a two. 60 00:04:07,190 --> 00:04:10,280 ‫And the scalar here is zero point seven. 61 00:04:10,700 --> 00:04:17,000 ‫Now if the vector is minus two plus two, which is this line here and a scalar is zero point seven, 62 00:04:17,120 --> 00:04:20,480 ‫then actually this blue line should probably come up to around here. 63 00:04:20,480 --> 00:04:21,690 ‫It shouldn't be the dot. 64 00:04:21,740 --> 00:04:24,500 ‫I think something is fundamentally wrong here. 65 00:04:24,770 --> 00:04:28,620 ‫Let's also check out what this variable S.V. actually is. 66 00:04:28,640 --> 00:04:33,350 ‫So if we print out S.V., then it's just a zero. 67 00:04:34,190 --> 00:04:37,670 ‫This is actually not this vector times point seven. 68 00:04:38,000 --> 00:04:39,140 ‫And so what's going on here? 69 00:04:39,140 --> 00:04:44,060 ‫I have no idea what's going on here, actually, but it looks like we are computing the DOT product 70 00:04:44,060 --> 00:04:45,580 ‫between Eskom. 71 00:04:45,620 --> 00:04:51,530 ‫S, so a vector that is point seven point seven and minus two plus two. 72 00:04:51,960 --> 00:04:54,500 ‫Now it actually makes sense where this result comes from. 73 00:04:54,780 --> 00:05:02,180 ‫Essentially what we are doing here is saying point seven times minus two plus point seven times plus 74 00:05:02,180 --> 00:05:03,540 ‫two and that equals zero. 75 00:05:03,830 --> 00:05:05,640 ‫So this is totally, totally wrong. 76 00:05:05,660 --> 00:05:12,520 ‫This actually is just supposed to be S times V like this. 77 00:05:13,220 --> 00:05:16,490 ‫And now when we print this out, we see we get what we expect. 78 00:05:16,520 --> 00:05:22,660 ‫So point seven times two is one point four and then we just get a scaled version of this vector. 79 00:05:23,000 --> 00:05:26,330 ‫Of course, now we've gotten some other errors and the errors on this line. 80 00:05:26,840 --> 00:05:34,280 ‫And you can actually see that this is you know, we need the first component here and the second component 81 00:05:34,280 --> 00:05:34,670 ‫here. 82 00:05:36,860 --> 00:05:39,350 ‫That should be one for the second component. 83 00:05:39,920 --> 00:05:40,750 ‫All right. 84 00:05:40,760 --> 00:05:42,500 ‫Now, this looks good. 85 00:05:42,800 --> 00:05:48,150 ‫I'm going to say that is the successful completion of this particular problem here. 86 00:05:49,040 --> 00:05:49,450 ‫All right. 87 00:05:49,460 --> 00:05:56,330 ‫So here we go, algorithm to compute the DOT product so we have some random vectors and then we do the 88 00:05:56,780 --> 00:06:05,720 ‫DOT product by setting the DOT product to be this variable, to be zero and adding to itself the corresponding 89 00:06:05,720 --> 00:06:11,510 ‫element in V times W and then we compare that to the function num num, pi, dot. 90 00:06:12,380 --> 00:06:12,820 ‫All right. 91 00:06:12,830 --> 00:06:15,710 ‫So we already get an error and this is related to shape. 92 00:06:15,730 --> 00:06:21,830 ‫So I hope that you already caught that one so you could change this to seven or you could have changed 93 00:06:21,830 --> 00:06:22,410 ‫that to eight. 94 00:06:22,460 --> 00:06:23,620 ‫Either way, it would be fine. 95 00:06:24,810 --> 00:06:25,160 ‫Hmm. 96 00:06:25,260 --> 00:06:30,990 ‫Now, these two answers are actually not equal to each other and what is going on here? 97 00:06:31,350 --> 00:06:35,980 ‫Well, if we look at this line of code carefully, it looks like this was a typo. 98 00:06:36,000 --> 00:06:37,920 ‫This probably should say I. 99 00:06:38,220 --> 00:06:43,590 ‫Otherwise, it was fixed to be the first or the second element in Vector W. 100 00:06:44,440 --> 00:06:44,940 ‫Let's see. 101 00:06:44,950 --> 00:06:49,170 ‫And now we get the same answer for both of these mechanisms. 102 00:06:49,950 --> 00:06:54,630 ‫And now I'd like to show you a little bit of a shortcut in Python for getting this to work. 103 00:06:55,140 --> 00:07:02,130 ‫So if you want to set a variable to be equal to itself plus something else, you can write out the line 104 00:07:02,130 --> 00:07:03,980 ‫of code like this totally fine. 105 00:07:03,990 --> 00:07:05,730 ‫I think this looks very clear. 106 00:07:06,060 --> 00:07:12,750 ‫However, it's possible to write it out in even more condensed language, and that's by saying plus 107 00:07:12,750 --> 00:07:15,000 ‫equals instead of just equals. 108 00:07:15,570 --> 00:07:23,760 ‫So Python will interpret this expression here as saying that the DOT product equals itself, plus whatever 109 00:07:23,760 --> 00:07:25,800 ‫is on the right hand side of this equation. 110 00:07:26,430 --> 00:07:27,440 ‫And you can see that here. 111 00:07:27,450 --> 00:07:34,300 ‫Now I'm running this again and you get the same answer for NPR dot and our algorithm here. 112 00:07:35,160 --> 00:07:40,380 ‫Now, obviously, these answers will change every time I run it because these are random numbers. 113 00:07:41,070 --> 00:07:41,770 ‫Very nice. 114 00:07:42,030 --> 00:07:42,770 ‫Let's see. 115 00:07:43,770 --> 00:07:48,570 ‫This doesn't exactly tell us what we're supposed to be doing here, but I can look down. 116 00:07:48,580 --> 00:07:55,800 ‫So here we are creating some data as a range of numbers that goes from zero to nine. 117 00:07:56,070 --> 00:07:59,550 ‫And then we add some normally distributed random numbers. 118 00:07:59,910 --> 00:08:05,590 ‫And here we are computing the correlation and confirm with the number by correlation coefficient. 119 00:08:05,640 --> 00:08:10,140 ‫OK, so I expect these two variables to be identical to each other. 120 00:08:10,470 --> 00:08:14,820 ‫And they're kind of close, I guess, but certainly not identical. 121 00:08:15,300 --> 00:08:16,480 ‫Let's see what's going wrong. 122 00:08:17,010 --> 00:08:23,850 ‫So remember from the video that I showed about computing, the correlation coefficient, that was an 123 00:08:23,850 --> 00:08:31,260 ‫application of the DOT product in statistics that the numerator of the correlation coefficient is the 124 00:08:31,260 --> 00:08:37,620 ‫DOT product between the two vectors and the denominator is the square root of the dot product of the 125 00:08:37,620 --> 00:08:43,770 ‫vector with itself times the square root of the dot product of the other vector with itself. 126 00:08:44,100 --> 00:08:46,190 ‫And then we do this division. 127 00:08:46,200 --> 00:08:48,570 ‫And so actually all of this is correct. 128 00:08:48,570 --> 00:08:51,080 ‫However, we are missing one thing. 129 00:08:51,090 --> 00:08:56,910 ‫What does that one thing that we're missing, the one thing that we're missing is that these data vectors, 130 00:08:56,910 --> 00:09:02,300 ‫these data streams need to be mean centered, so means center. 131 00:09:02,610 --> 00:09:07,110 ‫And that just means subtracting the mean from the data set. 132 00:09:07,120 --> 00:09:13,500 ‫So data one equals data one minus number, I mean of data one. 133 00:09:14,020 --> 00:09:19,080 ‫And now if you are already thinking that this can be simplified, then good for you. 134 00:09:19,260 --> 00:09:21,570 ‫We're going to do that like this. 135 00:09:22,830 --> 00:09:31,170 ‫And now that's for data one, and then we repeat this for data, too, and now we get exactly the same 136 00:09:31,170 --> 00:09:34,830 ‫correlation coefficient for both of these operations. 137 00:09:35,370 --> 00:09:40,740 ‫And actually, it's interesting to see that once you get down to about 10 or 12 or whatever, this is 138 00:09:40,980 --> 00:09:46,230 ‫degrees of precision, then eventually these algorithms do start to diverge a tiny bit. 139 00:09:46,500 --> 00:09:52,500 ‫And that's because kuriko of this function is actually implementing a slightly different and more efficient 140 00:09:52,500 --> 00:09:55,740 ‫and faster algorithm than what I'm showing here. 141 00:09:56,100 --> 00:09:57,410 ‫All right, here we go. 142 00:09:57,420 --> 00:10:04,410 ‫We are trying to compute the outer product, and this looks, again, like one of these approaches where 143 00:10:04,410 --> 00:10:07,560 ‫we compare the numpties function outr. 144 00:10:07,650 --> 00:10:15,510 ‫So the built in function outr to computing this manually, using the algorithm for computing the outer 145 00:10:15,510 --> 00:10:15,960 ‫product. 146 00:10:16,350 --> 00:10:23,460 ‫So remember that one way to compute the outer product is to set each row of the outer product matrix 147 00:10:23,850 --> 00:10:26,960 ‫to be the row of the right matrix. 148 00:10:26,970 --> 00:10:33,840 ‫So are the right vector, which is going to be this one times each element of the left vector, which 149 00:10:33,840 --> 00:10:35,280 ‫here looks like one. 150 00:10:36,060 --> 00:10:39,260 ‫So that already tells me that there's something going wrong here. 151 00:10:39,810 --> 00:10:41,790 ‫So let's let's just try to run this. 152 00:10:41,790 --> 00:10:44,550 ‫And this says could not broadcast input. 153 00:10:44,560 --> 00:10:44,760 ‫Right. 154 00:10:44,790 --> 00:10:52,050 ‫OK, so based on what I just described as the algorithm for computing the outer product matrix, I can 155 00:10:52,050 --> 00:10:54,830 ‫already determine that this is incorrect. 156 00:10:54,840 --> 00:11:02,220 ‫This should be the entire row vector on the right and each element of the column vector on the left 157 00:11:02,340 --> 00:11:02,960 ‫like this. 158 00:11:03,810 --> 00:11:04,260 ‫Hmm. 159 00:11:04,290 --> 00:11:08,700 ‫So now we don't get any explicit python errors. 160 00:11:09,060 --> 00:11:18,240 ‫But when I say the outer so this outer product matrix here, minus num outer, we get zeros for the 161 00:11:18,240 --> 00:11:22,680 ‫first four rows and then non zeros for these last four rows. 162 00:11:23,130 --> 00:11:26,040 ‫So there's clearly something strange happening here. 163 00:11:26,070 --> 00:11:26,910 ‫Let's try it again. 164 00:11:27,820 --> 00:11:28,230 ‫Hmm. 165 00:11:28,440 --> 00:11:29,580 ‫Again, the same thing. 166 00:11:29,610 --> 00:11:35,070 ‫So now we get all zeros for the first four rows and a couple of zeros here as well. 167 00:11:35,340 --> 00:11:39,880 ‫But it seems like the first four rows of zeros is pretty consistent. 168 00:11:40,380 --> 00:11:44,050 ‫I wonder what would happen if I would change the sizes of these matrices. 169 00:11:44,070 --> 00:11:49,470 ‫So let's say what if this is like six elements and this is eight elements? 170 00:11:50,050 --> 00:11:57,240 ‫Oh, now we actually do get an error message and it says index six is out of bounds for axis zero with 171 00:11:57,240 --> 00:11:57,960 ‫size six. 172 00:11:58,020 --> 00:12:03,160 ‫OK, what's actually happening is in this line here for the range. 173 00:12:03,510 --> 00:12:09,060 ‫Now, notice that we are what we are actually looping through is elements in one. 174 00:12:09,480 --> 00:12:15,270 ‫But what we are looping through here, what we are specifying is the range of the elements is actually 175 00:12:15,450 --> 00:12:17,250 ‫coming from the size of O2. 176 00:12:18,240 --> 00:12:21,150 ‫So I'm just going to replace the two with one. 177 00:12:21,330 --> 00:12:23,460 ‫And now we get a matrix of all zeros. 178 00:12:23,700 --> 00:12:32,100 ‫But this is a really tricky point because, you know, when it was this way, so how it was initially, 179 00:12:32,580 --> 00:12:37,680 ‫we didn't get any python coding errors because technically we haven't done anything wrong in terms of 180 00:12:37,680 --> 00:12:38,400 ‫programming. 181 00:12:38,640 --> 00:12:44,550 ‫We've done something wrong in terms of of math and indexing, but we haven't done anything illegal in 182 00:12:44,550 --> 00:12:45,930 ‫terms of python coding. 183 00:12:46,380 --> 00:12:47,610 ‫But the result is wrong. 184 00:12:47,610 --> 00:12:53,510 ‫And if you weren't actually comparing this, then, yeah, you probably wouldn't even notice. 185 00:12:53,520 --> 00:12:56,020 ‫You might not even notice that this error was in there. 186 00:12:56,400 --> 00:13:00,480 ‫So these are the most devious kinds of coding mistakes. 187 00:13:00,760 --> 00:13:02,040 ‫Anyway, let's move on. 188 00:13:02,790 --> 00:13:04,860 ‫OK, matrix multiplication. 189 00:13:05,130 --> 00:13:08,370 ‫So we have a random five by five matrix. 190 00:13:08,370 --> 00:13:12,000 ‫Multiply it by the five by five identity matrix. 191 00:13:12,270 --> 00:13:18,210 ‫And what we should see is a full matrix of random numbers, which we don't see. 192 00:13:18,210 --> 00:13:21,380 ‫In fact, we see a matrix that's mostly zeros. 193 00:13:21,900 --> 00:13:28,500 ‫So what's happening here is that the asterisk is implementing Element Y's multiplication, but we need 194 00:13:28,830 --> 00:13:31,190 ‫full on matrix multiplication. 195 00:13:31,650 --> 00:13:32,730 ‫So there you go. 196 00:13:33,600 --> 00:13:35,430 ‫All right, let's go on to the next cell. 197 00:13:35,440 --> 00:13:38,220 ‫It looks like this is a similar kind of problem. 198 00:13:38,220 --> 00:13:44,340 ‫So I can already see that this is a little bit weird here, multiplying a by the identity matrix. 199 00:13:45,590 --> 00:13:54,110 ‫So here we see the original Matrix A. Here we are doing Element Y's multiplication and this says there's 200 00:13:54,110 --> 00:13:55,540 ‫actually a size problem. 201 00:13:56,120 --> 00:14:02,180 ‫So for Element Y's multiplication, it's not possible with these two matrices because they are different 202 00:14:02,180 --> 00:14:02,680 ‫sizes. 203 00:14:02,690 --> 00:14:04,250 ‫They have a different number of elements. 204 00:14:04,580 --> 00:14:09,220 ‫So let's see what would happen if we would replace this with matrix multiplication. 205 00:14:09,650 --> 00:14:10,430 ‫And there you go. 206 00:14:10,440 --> 00:14:19,460 ‫We get that a on the top is the same thing as a matrix multiplying by the identity matrix on the bottom 207 00:14:19,460 --> 00:14:19,730 ‫here. 208 00:14:19,760 --> 00:14:23,810 ‫So you can see that this matrix is the same as this matrix. 209 00:14:24,750 --> 00:14:25,780 ‫All right here. 210 00:14:26,640 --> 00:14:31,090 ‫This one says Random matrices are convertible. 211 00:14:31,340 --> 00:14:37,130 ‫So what we do is create a matrix of random integers between minus five and plus five. 212 00:14:37,440 --> 00:14:39,950 ‫It's five by five and it's random. 213 00:14:39,960 --> 00:14:41,310 ‫So it should be convertible. 214 00:14:41,310 --> 00:14:44,180 ‫So I don't really see what the issue is here. 215 00:14:44,190 --> 00:14:50,430 ‫We should get the identity matrix because the Matrix times its inverse is the identity matrix. 216 00:14:50,460 --> 00:14:51,390 ‫Let's see what's going on. 217 00:14:52,740 --> 00:15:01,530 ‫Hmm, module number II has no attribute in the problem here is that it is not in the main PI module, 218 00:15:01,800 --> 00:15:06,240 ‫it's actually in the Lynn alg module or the sub module. 219 00:15:06,960 --> 00:15:12,960 ‫OK, so now we've multiplied a by its inverse and we get the identity matrix. 220 00:15:14,650 --> 00:15:22,330 ‫Let's see, so here we are plotting the Igen spectrum, so we create a matrix, multiply that matrix 221 00:15:22,330 --> 00:15:27,550 ‫by its own transpose, remember, that gives us a square symmetric matrix. 222 00:15:27,560 --> 00:15:31,510 ‫This matrix is already square, but it does give us a symmetric matrix. 223 00:15:32,020 --> 00:15:33,990 ‫And let's just see what's going on here. 224 00:15:35,320 --> 00:15:37,500 ‫So we don't get any python errors. 225 00:15:37,510 --> 00:15:39,120 ‫So that part seems OK. 226 00:15:39,610 --> 00:15:41,800 ‫But let's look at these eigenvalues. 227 00:15:41,800 --> 00:15:48,670 ‫You know, there's like 25 of these eigenvalues, but this is just a five by five matrix and we can 228 00:15:48,670 --> 00:15:49,570 ‫even confirm this. 229 00:15:49,570 --> 00:15:57,250 ‫So I'm going to print out num pi, the shape of M, and this is a five by five matrix. 230 00:15:57,250 --> 00:16:01,120 ‫So there's really only supposed to be five eigenvalues. 231 00:16:01,150 --> 00:16:02,370 ‫Let's see what's going on. 232 00:16:02,650 --> 00:16:10,100 ‫I'm going to look at the help file or the dock string for IG and let's see if this gives us some insight. 233 00:16:10,480 --> 00:16:19,510 ‫So this returns W is the eigenvalues and then V the second output is the Igen vectors. 234 00:16:19,870 --> 00:16:22,610 ‫So in fact the order of the output is wrong here. 235 00:16:22,630 --> 00:16:23,620 ‫This is just swopped. 236 00:16:23,890 --> 00:16:29,260 ‫This should be the eigenvalues and this should be the eigenvectors. 237 00:16:30,490 --> 00:16:36,850 ‫And now we only get five components, five things being plotted here, which is consistent. 238 00:16:36,850 --> 00:16:40,810 ‫That is exactly how many we expect for the eigenvalues. 239 00:16:41,340 --> 00:16:44,470 ‫By the way, I haven't yet introduced you to this function. 240 00:16:44,470 --> 00:16:47,740 ‫Flatten num pi matrix, dot flatten. 241 00:16:48,160 --> 00:16:54,850 ‫But essentially what that's doing is taking this matrix or whatever is the input matrix and expanding 242 00:16:54,850 --> 00:16:59,130 ‫it out from a matrix into one really long array, a really long vector. 243 00:16:59,800 --> 00:17:06,730 ‫And so for a the eigenvectors matrix, which is a five by five matrix, when you flatten it you get 244 00:17:06,730 --> 00:17:12,730 ‫25 total elements and that's why you get a line of twenty five here. 245 00:17:12,740 --> 00:17:18,520 ‫So these are just all the individual components of all the, each of the five eigenvectors. 246 00:17:18,790 --> 00:17:22,180 ‫OK, so set that back so that looks better. 247 00:17:23,080 --> 00:17:29,380 ‫By the way, you can also see here that the eigenvalues are not intrinsically sorted by magnitude, 248 00:17:29,680 --> 00:17:37,000 ‫so they don't come out as the largest eigenvalues first, that has to do with the estimation algorithm 249 00:17:37,000 --> 00:17:40,300 ‫that Python uses to compute the eigenvalues. 250 00:17:40,870 --> 00:17:42,600 ‫Anyway, let's move on. 251 00:17:42,640 --> 00:17:47,090 ‫This looks like the last exercise to work on for this bug hunt. 252 00:17:47,530 --> 00:17:51,670 ‫So it looks like we are creating a matrix of random integers. 253 00:17:51,970 --> 00:17:53,690 ‫It's a 10 by 20 matrix. 254 00:17:53,690 --> 00:17:58,450 ‫So actually we cannot perform an eigenvalue decomposition on this matrix. 255 00:17:58,450 --> 00:18:00,660 ‫But of course, we can do an SVOD. 256 00:18:01,240 --> 00:18:02,580 ‫So we do the DVD. 257 00:18:03,400 --> 00:18:11,080 ‫We create a full matrix based on a diagonal matrix based on these singular values. 258 00:18:11,350 --> 00:18:15,700 ‫And then we try to reconstruct that matrix and make some plots. 259 00:18:16,150 --> 00:18:16,510 ‫All right. 260 00:18:16,520 --> 00:18:19,720 ‫And we already get an error and it's related to size. 261 00:18:20,000 --> 00:18:27,200 ‫And this is, in fact, something that I discussed in the previous video on the singular value decomposition. 262 00:18:27,610 --> 00:18:36,010 ‫So what we need to do is first reconstruct as to be a Xeros matrix corresponding to the size or the 263 00:18:36,010 --> 00:18:48,550 ‫shape of the Matrix A and then we need to loop over the elements in S so range of length s and then 264 00:18:48,550 --> 00:18:55,510 ‫we say s the ith diagonal element equals the corresponding element in the little S. 265 00:18:55,540 --> 00:18:56,620 ‫So in vector s. 266 00:18:57,290 --> 00:18:59,380 ‫OK, so now let's see how this looks. 267 00:18:59,890 --> 00:19:01,510 ‫Oh we still get an error. 268 00:19:01,790 --> 00:19:03,810 ‫It's another mismatched dimension. 269 00:19:03,820 --> 00:19:04,090 ‫Hey. 270 00:19:04,090 --> 00:19:10,960 ‫But you know, looking at the order, this is not the correct order, it should be U times Sigma Times 271 00:19:10,960 --> 00:19:19,990 ‫V so I'm going to rewrite this like this you time Sigma Times V actually this is V transpose python 272 00:19:19,990 --> 00:19:22,720 ‫will automatically spit out V transpose. 273 00:19:24,130 --> 00:19:25,860 ‫OK, so this is looking good. 274 00:19:25,870 --> 00:19:32,230 ‫Here we see the Matrix A, the reconstructed matrix A and the difference between the two, which is 275 00:19:32,230 --> 00:19:33,070 ‫an empty plot. 276 00:19:33,070 --> 00:19:33,940 ‫It's all zeros. 277 00:19:34,090 --> 00:19:38,980 ‫And that's comforting because that means that we have reconstructed this matrix accurately. 278 00:19:40,070 --> 00:19:45,770 ‫I hope you enjoyed this bug hunt and more generally, I hope you enjoyed learning a little bit about 279 00:19:45,770 --> 00:19:48,980 ‫linear algebra from this section of the course. 280 00:19:49,460 --> 00:19:55,610 ‫As I mentioned in the beginning of this section, linear algebra is a beautiful, rich and really important 281 00:19:55,610 --> 00:19:56,880 ‫topic in mathematics. 282 00:19:57,140 --> 00:20:02,450 ‫I hope you feel like you got a little bit of a taste, a little bit of enthusiasm about learning linear 283 00:20:02,450 --> 00:20:03,830 ‫algebra from this section. 284 00:20:04,400 --> 00:20:09,440 ‫And maybe you are inspired to continue learning about linear algebra in more depth. 28437

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.