Index exceeds Matrix dimensions

Hello
I am trying to run the following block of code-
for q = patient_num(1):patient_num(end)
flag=[];
i=0;
num = num2str(patient_num(q));
for j= file_num(1):file_num(end)
file = num2str(file_num(j));
record_file = strcat('explained','_','ch','_',num,'_',file,'-percent-explain-10', '.mat');
cd ('/scratch/group/eegnw/EEG/DATA/')
flag[i]=load('-mat',record_file);
i=i+1;
end
end
I want to check if this is running correctly or not by looking at the value of i at the end. I give inputs as patient_num=1:3, file_num=2:4. However, after running the outer loop for one patient_num, I get an error saying Index exceeds matrix dimensions. Basically the value of patient_num has changed from a vector [1 2 3] to just a scalar 1. I can't figure out why that is happening as my code doesn't modify that anywhere. Any help is appreciated.
Expected output- i=9

답변 (3개)

Walter Roberson
Walter Roberson 2016년 7월 7일

1 개 추천

Using that form of load() is not recommended. It is recommended that instead you assign the output of load() to a variable. The result will be a structure with one field for each variable stored in the file. You then extract the needed parts of the structure. This approach cannot accidentally overwrite unexpected variables like your current approach can.

댓글 수: 1

Mridul Garg
Mridul Garg 2016년 7월 7일
I tried that, introducing a variable names flag=[], and storing the output of load in it. Still the same error

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

James Tursa
James Tursa 2016년 7월 7일

0 개 추천

Is there a variable named patient_num in the mat file?

댓글 수: 6

Mridul Garg
Mridul Garg 2016년 7월 7일
I'm defining patient_num and file_num beforehand as 1:3 and 2:5
James Tursa
James Tursa 2016년 7월 7일
Yes, but you stated that patient_num had changed. Loading a mat file could change it if the mat file had a variable named patient_num.
Mridul Garg
Mridul Garg 2016년 7월 7일
Oh, okay. I think that might be the issue, let me try changing the variable name.
Mridul Garg
Mridul Garg 2016년 7월 7일
No, changing that doesn't help.
James Tursa
James Tursa 2016년 7월 7일
편집: James Tursa 2016년 7월 7일
Please show your current code. Are you sure that patient_num is the expected vector at the start of this code? What happens if you comment out the load command and then run this section of code?
I updated the code but it gives me another error now-
Error: Unbalanced or unexpected parenthesis or bracket.

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

Star Strider
Star Strider 2016년 7월 8일

0 개 추천

The square bracket here is not legal MATLAB syntax:
flag[i]=load('-mat',record_file);
consider instead:
flag{i} = load('-mat',record_file);

댓글 수: 4

If I do that, I get the previous error-
Index exceeds matrix dimensions.
I can’t run your exact code because I don’t have your files or other data.
Run this version to see where the problem might be:
patient_num = 1:3; % Create Data
file_num = 1:3; % Create Data
for q = patient_num(1):patient_num(end)
flag={};
i=1;
num = num2str(patient_num(q));
for j= file_num(1):file_num(end)
file = num2str(file_num(j));
record_file = strcat('explained','_','ch','_',num,'_',file,'-percent-explain-10', '.mat');
% cd ('/scratch/group/eegnw/EEG/DATA/')
% flag[i]=load('-mat',record_file);
flag{i} = record_file;
i=i+1;
end
end
Note that the counter is reset inside the first loop. You may want to intitalise it before the ‘q’ loop. (I changed the initialisation to 1 because MATLAB does not allow zero or negative or non-integer indices, and you increment it after the ‘flag’ assignment.)
Walter Roberson
Walter Roberson 2016년 7월 8일
Star Strider, is it part of the debugging that you do not load() the file?
Star Strider
Star Strider 2016년 7월 8일
Here, yes. The indexing seems to be the problem, so sorting that first may be appropriate.
Also, there are no files to load. I would create one or more, but I have no idea what they actually contain, so I can’t simulate what the code does. I don’t understand where the matrix dimensions problem arises (other than initialising ‘i’ in the inner loop and expecting it to eventually equal the sum of iterations of the inner and outer loops, since it will currently count only to whatever the inner loop limit is).

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

카테고리

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

질문:

2016년 7월 7일

댓글:

2016년 7월 8일

Community Treasure Hunt

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

Start Hunting!

Translated by