for loop options in Matlab

I just learned about Matlab's ability to use matrices as arguments to a for loop;
This displays the columns of the matrix A
A = magic(5)
for n = A
disp(n)
end
I was wondering if it is possible to obtain a sequential index into a loop like this. ie. if I want to print the column number along with the column itself, can I continue with the form above or would I need to revert to a more typical form like
A = magic(5)
for jj = 1:length(A)
disp(['Column #',num2str(jj)])
disp(A(:,jj))
end

 Respuesta aceptada

Walter Roberson
Walter Roberson el 24 de Sept. de 2012

0 votos

You would need the more traditional form. There is no way to query which iteration number you are on.

Más respuestas (2)

Matt Fig
Matt Fig el 24 de Sept. de 2012

1 voto

A = magic(5)
cnt = 1;
for jj = A
disp(['Column #' num2str(cnt)])
disp(jj),
cnt = cnt+1;
end

4 comentarios

Ravi
Ravi el 24 de Sept. de 2012
Thanks for this. Unfortunately, it looks like I can only mark one answer as accepted...
Matt Fig
Matt Fig el 24 de Sept. de 2012
Editada: Matt Fig el 24 de Sept. de 2012
Walter, did you look closely at the code? I ran it, and it does exactly what Ravi asked for...
Column #1
17
23
4
10
11
Column #2
24
5
6
12
18
Column #3
1
7
13
19
25
Column #4
8
14
20
21
2
Column #5
15
16
22
3
9
Walter Roberson
Walter Roberson el 24 de Sept. de 2012
Oh... yes, you are right, I had forgotten that it went by columns when matrices are used. blush
Ravi
Ravi el 24 de Sept. de 2012
I see... Backstory is that I was thinking about rewriting some existing code with for loops using the matrix approach for potential performance improvements. I did some quick tests and both methods take almost identical times. I can see the matrix approach being helpful down the line. Kind of like having a 'foreach' command.

Iniciar sesión para comentar.

Shadow
Shadow el 2 de Abr. de 2024

0 votos

enumer = @(my_array) cell2mat(arrayfun(@(x,idx) struct("cargo",x,"idx",idx), my_array(:).', 1:numel(my_array(:).'),UniformOutput=false));
data = rand(5,4)
s=size(data);
for elem = enumer(data)
[row,col] = ind2sub(s,elem.idx);
disp("Element " + string(elem.cargo) + " with index " + string(elem.idx) + " at location " + string(row) + "," + string(col))
end

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 24 de Sept. de 2012

Respondida:

el 2 de Abr. de 2024

Community Treasure Hunt

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

Start Hunting!

Translated by