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

64 visualizaciones (últimos 30 días)
윤서
윤서 el 3 de Dic. de 2025 a las 9:47
Comentada: Walter Roberson el 3 de Dic. de 2025 a las 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 comentarios
Stephen23
Stephen23 el 3 de Dic. de 2025 a las 13:36
Editada: Stephen23 el 3 de Dic. de 2025 a las 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 el 3 de Dic. de 2025 a las 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>

Iniciar sesión para comentar.

Respuestas (1)

Dyuman Joshi
Dyuman Joshi el 3 de Dic. de 2025 a las 12:41
Editada: Dyuman Joshi el 3 de Dic. de 2025 a las 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 comentarios
dpb
dpb el 3 de Dic. de 2025 a las 16:25
Editada: dpb el 3 de Dic. de 2025 a las 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 el 3 de Dic. de 2025 a las 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>

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2025b

Community Treasure Hunt

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

Start Hunting!

Translated by