Script works on Windows OS but not on MacOS
1 view (last 30 days)
Show older comments
Hello everybody,
I am trying to SMOTE data augmentation for a image dataset but the script I evaluate works on Windows OS but not on MacOS. Part of the code is below and it's like;
labels=[];info=strfind(files,'\');
for i=1:numel(files)
idx=info{i};
dirName=files{i};
targetStr=dirName(idx(end-1)+1:idx(end)-1);
targetStr2=cellstr(targetStr);
labels=[labels;categorical(targetStr2)];
end
and the error I'm having is;
Array indices must be positive integers or logical values.
Error in smote (line 24)
targetStr=dirName(idx(end-1)+1:idx(end)-1);
anyone has any idea why I'm having that problem?
0 Comments
Answers (1)
Jan
on 22 Dec 2022
Edited: Jan
on 22 Dec 2022
Use the debugger to identify the problem. Type this in the command window:
dbstop if error
Then run the code again. If Matlab stops at the error, check the values of the variables:
dirName
idx
idx(end-1)+1
idx(end)-1
If idx is a scalar, idx(end-1) requests the 0th element, which is failing.
This can happen, because MacOS and Windows use different file separators. Therefore this is a bad idea:
info=strfind(files,'\');
% Better:
info=strfind(files, filesep);
Another option is to use fileparts instead of handmade parsing of paths.
2 Comments
Steven Lord
on 22 Dec 2022
You haven't fixed the problem by switching from hard-coded '\' to hard-coded '/'. You've just changed on which OS your code works and on which OS it doesn't.
I second Jan's suggestions to use either filesep or fileparts (and if you need to reassemble a file path from parts use fullfile.)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!