[MUSIC] Now that we know how to make a matrix,
we need to know how to access parts of it. So, for example, if we want to see
just the one element on the second row in the third column,
we'll know how to do it. And it's all based on rows and columns. To see how it's done,
we need a sample matrix. This command will make us one. And here it is. As you can see, its dimensions are 3 by 4,
meaning that it has 3 rows and 4 columns. And they're numbered from top to bottom. 1, 2, 3. And the columns are numbered, too. 1, 2, 3, 4, from left to right. So how do you look at just the element
on the second row and the third column? You give the command X, left parenthesis,
2, comma, 3, right parenthesis. The 2 is the row index, and
the 3 is the column index. As always,
the row comes before the column. Together, the two indices, 2 and
3, in parentheses and separated by commas,
tell MATLAB which element you want to see. And it shows it to you. Okay, let's do this same example again, but this time, let's do it in MATLAB. Okay, well,
let's look at this same example in MATLAB. We'll set X equal to left bracket, 1 colon 4, semi-colon, 5 colon 8, semi-colon, 9 colon 12, right bracket. Note how we've used the colon
operator to save typing. You know, we could have done it
the hard way, which would have been X equals 1, 2, 3, 4,
5, 6, you know, et cetera. I'm not even going to do that. It's just too much work. But the colon operator works perfectly. Each row of a matrix is
simply a vector of numbers. And the colon operator produces a row
vector of evenly spaced numbers. So if we want the numbers on
a row to be evenly spaced, we can use a colon operator
instead of typing them out. And that's what we wanted this time,
so we used the colon operator. Okay, to continue with our example, let's specify the third element on
the second row, as we did before. So, we say x, parenthesis now, 2, 3, right parenthesis. And we see the answer is 7. We always, as here we did, give the row
index first and the column index second. We can also use this notation
in an assignment operator. So let's say we want to call
the variable center and we set it equal to X(2,3),
as we did before. center now has the value 7. Or bob——I don't know——X[3,3]. There we go: bob is 11. And as you can see up here,
where X was displayed——this 3 by 4 matrix—— on the third row——and
here's the 3 down here—— in the third column——
here's the second 3——we find the 11. And we can assign a new value
to a specified element. X(2,3), instead of being 7,
I'd like it to be 97. So we set it to 97. You'll notice that while we only
mentioned to MATLAB one element, it shows us the whole matrix. Well, we will notice, however,
that it did make the change we requested. So element 2, 3, that is second row,
third column, is now 97. And if we wanted the second row,
second column to be—— well, I don't know——a hundred and twenty-three. If we look at it now, it's a hundred and twenty-three. So what happens if we assign a value
to an element of a matrix, but the matrix doesn't exist? Let's say, for example, the matrix XYZ. If we look over in the Workspace,
we'll see there's no XYZ matrix. So it doesn't exist yet. Another way to check to see if it
exists is to try to look at it. Hm, we get one of those awful red messages
saying we made some kind of error. Okay, MATLAB, I did this on purpose. It's not really an error this time. But anyway, let's set a value to it. XYZ, element 2,2 is equal to one hundred twenty-three. So we're doing the same
thing we did with X, but now we're doing it with
a non-existent matrix. So you expect more red to come back,
I'm sure. Well, surprise! What is this? XYZ equals 0, 0, 0, 123. Well, here's what MATLAB did. It said: You want to have a matrix XYZ, and
you want to have 123 on row 2, column 2. I'll give that to you. You didn't tell me what goes on
the rest of the rows and columns, so I'll put zeros there. And that's what MATLAB does. It makes the smallest matrix it can and
still accommodate your request. In other words, the smallest matrix
it can that has an element, 2, 2. And that's a 2 by 2 matrix. And what happens if the matrix exists,
but the element we specify doesn't exist? Let's try to peek at
a non-existent element. Let's look at the element of the 3 by 4 matrix that's on
the fourth row in the fifth column. That doesn't exist. Well, we get our hand slapped,
and we deserve it. But an assignment to a non-existing
position like this is another thing entirely. Let's assign a value to element 4,5, say 456. So what's this? Well, MATLAB has to extend the size
of the matrix from 3 by 4 to 4 by 5 to accommodate our request to put
something at element 4, 5: the 456. There it is. It's right there. We didn't tell it what else
to put on the fourth row and we didn't tell it what else to put on
the fifth column, so it put zeros there. There's one pitfall we need to point out concerning the first
element on the first row. Let's set that first element on
the first row to the value 99. It's 1 right now, and
we'll change it to 99. There. So we see our matrix with
the 99 replacing the 1. That works fine. You might be tempted to do this,
because we've talked about how X as a scalar is the same
as a 1 by 1 matrix. And it kind of looks like the same
meaning here, but it's not. It's entirely different. What we have just done is
obliterated our entire matrix and replaced it with just the 1
by 1 scalar matrix, 99. Well, we know how to access or
change individual matrix elements. But, you know, we can change multiple elements at a time
using the so-called subarray operations. Let's see how that works. Let's come up with a little simpler
matrix this time, just two rows. It’s one of my favorite matrices because
it's so easy to type. One, two, three, four, five, six. Let's look at a sub-array. I'm going to type X two comma and
one three. What I've done here is I said that I'm
interested in just the second row and I'm interested in the first and
the third columns. I want to see that. So, MATLAB slices off that second row, and
it gives me the first and the third element on the row, and
there they are: four, six. This is a sub-array.
This is the whole array, and this four and this six taking together
is the subarray that we’ve specified. The comma's required, by the way:
this one I'm talking about. Let's try doing without it. [CLICKING] We get an error.
And it's just as easy to specify multiple
rows as multiple columns. So here we go. I'm going to say I want row two first and
then row one, and I just want to look at the column two. Now let's go back and look at what X is. It’s still visible up here. We've asked for row two first—and
there's the five—and then row one—and there's the two. We asked for second column in each case. So it puts the five first and
then the two. And here's a combination of
multiple rows and multiple columns. From our rows, I'm going to say I want
row two first, and then row one, and then row two, and then for the columns, I want to start with three and
go to one and one again and then two. You can do anything you want to as long as you're picking elements
that are actually inside the array. So let's just look briefly here. We took row two first, and row two had a four,
a five, and a six on it. And we asked for columns three and
then one twice and then two. So here the six, the four,
the four is repeated because we asked for it twice, and then the 5, and then you can
see what happened with the other rows. You can do any combination you want as
long the elements you request exist in X. Let me give an up-arrow to
repeat the previous command. I'm going to change that two to an
eight and hit Enter. Well, MATLAB didn't like
that because we asked for elements that didn't exist inside X. And you can use the colon
operator to form the subarray. As an illustration, let's do this without the colon operator. I’m spacing this out so
you can see it a little better. Or we can do the same result
with the colon operator. Let's do it that way. Instead of this one, two,
three vector which I wrote out explicitly, this time, I'm going to get the same
thing with the colon operator. This not really a new concept. It's just a combination of two
concepts that you’ve already learned. First, you learned that a vector like 1, 2, 3 can be used in a subarray operation.
And second, you learn that the colon operator can
produce a vector of evenly spaced numbers— in this case, one, two, three. [CLICK] And you can get as fancy
as you want with this. For example, let's do this: We'll put two, colon, minus one, colon, one,
for the rows we want and for the columns, three, colon,
minus one, colon, one. We're going backwards on both of them.
And there you have it. MATLAB provides a very helpful way for specifying the last index of a row or
a column. Here's an example. [CLICKING] As you might guess,
the word “end” here means the last row index in the matrix X. And here's how you ask for the last
column index. I'm sure you can guess. You just put “end” in the column position. “end” is an example of a keyword in MATLAB. The term “keyword” is a computer
science term, and it's used for all programming languages. Its definition is simply a word that has
a special meaning in the language. And every programming language has keywords. Here, the special meaning of
this keyword is last index. A keyword is also typically reserved, meaning that you can't use it as
the name of a variable or a function. Let's try to do that. We'll set end equal to five, oops. As you can see MATLAB says
it's a reserved word. The keyword “end” may not seem all
that helpful to you right now, but we'll see later that it's very helpful
when we write a program in which we can't know what the last index is. That actually happens a lot. When it does, “end”
will always give it to us. Here's some more examples of end. [CLICKING] you can do it in both positions. [CLICKING]
And here's two, end, one end three. So we pick the second last, the first, and then the last element
again on the third column. And you might be surprised to find that
“end” can be used in arithmetic expression. Subtraction's the most common. Let's do one of those. Let's remind ourselves what X is, now. It's one, two, three, four, five, six.
So here we go: one, end minus one. So this means we want to
be on the first row, and instead of the last element,
we want one before the last element. end minus one means end,
which is the index, three, minus one, which gives us the one before that too. And here's another one [CLICKING]. And finally, if you want the last two elements of the first row [CLICKING] in reverse order, you get them. Addition is a little bit less common
with end, and it'll cause an error if you're using it to look beyond the end
of a matrix or trying to, like say this: But it's perfectly legal
in an assignment operation, like say this. [CLICK] Notice that X has gotten bigger. Up here, we see it was one, two, three,
four, five, six, two rows, three columns. Now it's 1, 2, 3, 4, 5, 6, 17, 0, 0. When we put end plus 1, we said we
wanted to put 17 on the third row. Well there wasn't a third row,
so MATLAB added one. We told it what to put
in the first column. We didn't tell it what to put
in the other two columns. So as usual it guesses
that we want zeroes there. “end” can also be used with a colon operator. Here's some examples of that. Let's see what we've done here. We want row one here, and
we want to start at column one, and jump by two until we get to the end. Well, row one has a 1, 2, and a 3. We jump over that two and
we get a 3, 1, 3. Here we want the third row,
and here's the third row. And we want to start at the end and go
backwards to 2, 0, 0 and there's the 0, 0. And in this last one,
we want row 1—here's row 1. And we want to start, not at the end, but
at one short of the end. That's here. And go to the end 2, 3. And so you see we have a 2, 3 here. Well, MATLAB also provides a shorthand for
one particular phrase: 1 colon end. Let's start, first of all, by
putting 1 colon n 2. 2, 5, 0. We want to go from the first
row to the last row, and we want to stick on column two,
and here it is. Let's look at this. Instead of 1 colon end,
I just put colon, and then a 2. And it's the same thing. The colon stands for 1 colon end. It's a shorthand. And, of course,
it's the same with the column indices. So we could do this. And that means we want row 1 and then
all the elements on that row: 1, 2, 3. And, of course,
you can use it in both positions. If we want all the rows
and all the columns. That's just the same as X. So this isn't a shorthand. It's more like a longhand. And of course this is even longer. [CLICKING] But all three of these
things give us the same thing. But the point here is that MATLAB opts for
consistency, which means it always lets you use these expressions for
any index with no exceptions. This emphasis on consistency is a hallmark
of a good programming language, and all the programming languages that
are in heavy use today, including C, C++, and Java, and even good old
Fortran, all emphasize it too. Well, so far, we've used the array operations just
to look at elements inside a matrix. But, you can also use them to change
the values of elements inside a matrix. Let's look at an example of that. I'm going to give the subarray
one to end and one. And if we look at that,
we see that's elements 1, 4, and 17 there on the first column. And if I give this operation,
which is an assignment operation, we see that we have assigned minus 44
to every one of the elements in that subarray, in other words,
the whole first column. And you'll notice that as usual, we get to see the whole array
when we do a subarray operation. Here's another one. Now, what we've done is told MATLAB that
we're interested in all the rows and we're interested in columns two and three. And we want to set all those elements,
each to the value of 9. Arrays can be on the right side too. Let me show what I'm talking
about with an example. I'm going to type the same
left side that I just typed. On the right side,
I'm going to specify an array. There, you can see what's happened. The array that I specified on the right
side just fits exactly into the subarray that I specified on the left side, and
so MATLAB has dutifully put it there. And the size on the right side has
to match that on the left side. It's a rule. Let's try to violate that rule and
see what happens. Here on the left side, I'm putting exactly
the same thing that I did before, but on the right side, I'm giving just a row
vector, and that's not the same shape. And MATLAB complains. [MUSIC] [APPLAUSE]