Skipping files in a set
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have 600 .vec files from a recent experiment and I need to remove/skip certain files from this group because they contain bad data. Say I need to remove files 132, 290, and 404. How would I do this? Here is the code I have for creating the matrices I need. Thank you.
rightfiles=dir('*.vec'); % Selects only the files in the directory ending with .vec. Generates a 600x1 struct.
for z=1:1:size(rightfiles)
f=importdata([rightfiles(z).name]);%Transitions data from .vec to .mat
%Sets x,y,u,v into matrices of only columns 1-4 from rightfiles, respectively
x=f.data(:,1);
y=f.data(:,2);
u=f.data(:,3);
v=f.data(:,4);
%Reshapes x,y,u,v into IxJ matrices
xx=reshape(x,[I,J])';
yy=reshape(y,[I,J])';
uu=reshape(u,[I,J])';
vv=reshape(v,[I,J])';
%Convert to the correct units
ConversionU=uu.*(m_pix/dt);
ConversionV=vv.*(m_pix/dt);
ConversionX=xx*m_pix;
ConversionY=yy*m_pix;
%Stack the vec files
U(:,:,z)=ConversionU;
V(:,:,z)=ConversionV;
X(:,:,z)=ConversionX;
Y(:,:,z)=ConversionY;
end
2 commentaires
Réponses (2)
Jan
le 28 Nov 2019
Modifié(e) : Jan
le 28 Nov 2019
What does "files 132, 290, and 404" mean? Are these the indices in rightfiles, or are these parts of the file name?
rightfiles=dir('*.vec');
rightfiles([132, 290, 404]) = [];
for z = 1:numel(rightfiles)
f = importdata(rightfiles(z).name);
...
I've added some changes:
- size(rightfield) replies a vector. 1:1:vector might reply something other than you expect. Although this works here for accident, it is safer to use numel instead.
- 1:x looks nicer than 1:1:x
- No need for square brackets around rightfiles(z).name. The [ and ] are the operator for concatenation. With one input only, there is nothing to concatenate.
Apply a pre-allocation before the loop. Letting arrays grow iteratively is extremely expensive.
Image Analyst
le 28 Nov 2019
Make a function calls HasGoodData() that take in f and determines if the data is bad or not and returns true for good data and false for bad data. Then, in your loop...
for z = 1 : size(rightfiles)
f=importdata([rightfiles(z).name]); % Transitions data from .vec to .mat
if ~HasGoodData(f) % If not good data...
continue; % Skip this file by jumping to the very bottom of the loop but continuing with the next iteration.
end
% Run code for good data...
end % of for loop
0 commentaires
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!