For loop with vertical vs horizontal array

20 views (last 30 days)
Is the below difference intended functionality or a bug?
x = [1, 2, 3, 4];
for y = x
disp( 'Printing' );
disp( y );
end
Result:
Printing
1
Printing
2
Printing
3
Printing
4
Whereas if I transpose x, the loop only runs once with y = [1; 2; 3; 4].
x = [1, 2, 3, 4]';
for y = x
disp( 'Printing' );
disp( y );
end
Result:
Printing
1
2
3
4
Perhaps I'm being thick, but I can't find this behavior documented anywhere and I would have expected it to loop through the elements in the matrix/array as if it were one dimensional (linear indexing).

Accepted Answer

Image Analyst
Image Analyst on 11 Dec 2012
I agree it's confusing at first. However it is documented in the "for" section:
for index = valArray
creates a column vector index from subsequent columns of array valArray on each iteration. For example, on the first iteration, index = valArray(:,1). The loop executes for a maximum of n times, where n is the number of columns of valArray, given by numel(valArray, 1, :). The input valArray can be of any MATLAB data type, including a string, cell array, or struct.
In your sexcond case, n is 1 - one column so the loop executes only once. In your first case, n was 4 - four columns so the loop executed 4 times.
  5 Comments
Walter Roberson
Walter Roberson on 11 Dec 2012
The simple ' is conjugate transpose, in which the signs of the complex part of values are reversed. The .' operator is plain transpose.

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 11 Dec 2012
It is deliberate behavior.
valarray : creates a column vector index from subsequent columns of array valArray on each iteration. For example, on the first iteration, index = valArray(:,1). The loop executes for a maximum of n times, where n is the number of columns of valArray, given by numel(valArray, 1, :). The input valArray can be of any MATLAB data type, including a string, cell array, or struct.

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!