Given the following example:
>> I=[2 1 3;3 2 4]
I =
2 1 3
3 2 4
>> I(:)
ans =
2
3
1
2
3
4
>> I(1:2)
ans =
2 3
Why does I(:) return a column vector while I(1:2) returns a shorter row vector?
The
(:)syntax, when used as an index on the right-hand side of an equation, is a special operation that reshapes an entire matrix of any dimension into a single column vector. The following two lines of code therefore give the same result:When numerical values are included on either side of a single colon, it denotes a range of linear indices into an array. So
I(1:2)selects the first and second elements fromI(i.e. the values in the first column). One thing to remember is that the syntax1:2actually creates a vector[1 2], soI(1:2)is the same asI([1 2]). Since the linear index[1 2]is a row vector, the returned values are shaped as a row vector[2 3]. If you use the indexI([1; 2])orI((1:2).'), the linear index is a column vector, so the returned values will be shaped as a column vector[2; 3].When you have multiple indices separated by commas, the indices are applied to different dimensions of the matrix being indexed. For example,
I(1:2, 1:2)will return the 2-by-2 matrix[2 1; 3 2]. The first1:2in the index is applied to the rows, so rows one and two are selected. The second1:2in the index is applied to the columns, so columns one and two are selected.The MATLAB documentation describing the colon operator and matrix indexing should help give you a better understanding of how to use
:effectively.