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

 채택된 답변

Walter Roberson
Walter Roberson 2012년 9월 24일

0 개 추천

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

추가 답변 (2개)

Matt Fig
Matt Fig 2012년 9월 24일

1 개 추천

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

댓글 수: 4

Ravi
Ravi 2012년 9월 24일
Thanks for this. Unfortunately, it looks like I can only mark one answer as accepted...
Matt Fig
Matt Fig 2012년 9월 24일
편집: Matt Fig 2012년 9월 24일
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 2012년 9월 24일
Oh... yes, you are right, I had forgotten that it went by columns when matrices are used. blush
Ravi
Ravi 2012년 9월 24일
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.

댓글을 달려면 로그인하십시오.

Shadow
Shadow 2024년 4월 2일

0 개 추천

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

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

질문:

2012년 9월 24일

답변:

2024년 4월 2일

Community Treasure Hunt

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

Start Hunting!

Translated by