I'd like to ask about the colon operator (:) in MATLAB.

54 views (last 30 days)
윤서
윤서 on 3 Dec 2025 at 9:47
Commented: Walter Roberson on 3 Dec 2025 at 19:56
I'd like to ask about the colon operator (:) in MATLAB.
If I have the matrix A = [1 2 3; 4 5 6], then A(:) results in a column vector with the elements in the order 1, 4, 2, 5, 3, 6
However, when I use A(1:6), it produces a row vector with the same elements: 1, 4, 2, 5, 3, 6
Both ChatGPT and Gemini claim that A(1:6) uses linear indexing and the result should always be a column vector. But when I run it in MATLAB, the result is a row vector.
Could you please explain the reason for this?
  2 Comments
Stephen23
Stephen23 on 3 Dec 2025 at 13:36
Edited: Stephen23 on 3 Dec 2025 at 13:42
"WBoth ChatGPT and Gemini claim that A(1:6) uses linear indexing and the result should always be a column vector."
Both ChatGPT and Gemini are wrong.
"Could you please explain the reason for this?"
Yes: the reason is that AI tools are not arbiters of truth and people trust them too much.
Reading the MATLAB documentation is a much more reliable way to know how MATLAB works.
Walter Roberson
Walter Roberson on 3 Dec 2025 at 19:56
Note by the way that the colon indexing part is not relevant:
A = [1 2 3; 4 5 6];
A(1:6)
ans = 1×6
1 4 2 5 3 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
A([1 2 3 4 5 6])
ans = 1×6
1 4 2 5 3 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
A((1:6).')
ans = 6×1
1 4 2 5 3 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
A([1 2 3 4 5 6].')
ans = 6×1
1 4 2 5 3 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

Sign in to comment.

Answers (1)

Dyuman Joshi
Dyuman Joshi on 3 Dec 2025 at 12:41
Edited: Dyuman Joshi on 3 Dec 2025 at 12:48
"Both ChatGPT and Gemini claim that A(1:6) uses linear indexing and the result should always be a column vector."
That is incorrect. The output of an array called via linear indices is as per the form of the input provided -
A = [1 2 3; 4 5 6];
A(:)
ans = 6×1
1 4 2 5 3 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Indices as a row vector give output as a row vector -
A(1:6)
ans = 1×6
1 4 2 5 3 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Indices as a column vector give output as a column vector -
A((1:6).')
ans = 6×1
1 4 2 5 3 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
However, if data is a vector, then regardless of the orientation of indices, the output form will maintain the orientation of the original data -
%Data as a row vector
B = 1:2:20
B = 1×10
1 3 5 7 9 11 13 15 17 19
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
B(1:6)
ans = 1×6
1 3 5 7 9 11
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
B((1:6).')
ans = 1×6
1 3 5 7 9 11
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
%Data as a column vector
C = (2:2:20).'
C = 10×1
2 4 6 8 10 12 14 16 18 20
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
C(1:6)
ans = 6×1
2 4 6 8 10 12
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
C((1:6).')
ans = 6×1
2 4 6 8 10 12
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
See this documentation page for detailed information - https://in.mathworks.com/help/matlab/math/detailed-rules-about-array-indexing.html
  2 Comments
dpb
dpb on 3 Dec 2025 at 16:25
Edited: dpb on 3 Dec 2025 at 16:57
"The output of an array called via linear indices is as per the form of the input provided"
Precisely. As previously observed,
A = [1 2 3; 4 5 6]
A = 2×3
1 2 3 4 5 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
A(:)
ans = 6×1
1 4 2 5 3 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
is a column vector.
However, NOTA BENE:
A(:,:)
ans = 2×3
1 2 3 4 5 6
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
is the original array as defined.
The explanation is that when using only (:) as the indexing expression you have asked for only one dimension and by position it is the first. By definition that is the rows indexing position and therefore, one gets what asked for -- a column vector.
In the second case, both row and column indices are provided and so one gets the 2D array as output.
The syntax
A(,:)
Invalid expression. When calling a function or indexing a variable, use parentheses. Otherwise, check for mismatched delimiters.
is not supported to get a row vector, however.
One additional syntax note is that instead of a hardcoded numeric index value of the number of elements, to write A(1:6) generically, use
A(1:end)
Stephen23
Stephen23 on 3 Dec 2025 at 17:04
Note that the final index is (strictly speaking) always a linear index (that accumulates all trailing dimensions):
A = randi(9,4,3,2)
A =
A(:,:,1) = 6 6 9 7 9 3 7 3 5 4 8 1 A(:,:,2) = 7 9 7 8 6 8 7 6 8 3 1 2
A(:,:)
ans = 4×6
6 6 9 7 9 7 7 9 3 8 6 8 7 3 5 7 6 8 4 8 1 3 1 2
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

Sign in to comment.

Tags

Products


Release

R2025b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!