how to extract one variable from mat flies

Dear all, I have one sequence of mat files (1,2, ... 100.mat), each mat file as below: Name Size Bytes Class Attributes
c 1x1 552 struct
data 500x500 2000000 double
timestamp 1x55 110 char
now, I just need the data, would you please tell me how to extract the data from all of the mat files?
Looking forwards your kind help.
Pengju

 Respuesta aceptada

Image Analyst
Image Analyst el 12 de Sept. de 2014
Editada: Image Analyst el 12 de Sept. de 2014
myFolder = 'D:\myData';
if ~isdir(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s', myFolder);
uiwait(warndlg(errorMessage));
return;
end
% Get list of all .mat files in this folder.
filePattern = fullfile(myFolder, '*.mat');
matFiles = dir(filePattern);
% Go through all mat files, extracting "data" and summing it
% into an accumulation array.
for k = 1:length(matFiles)
baseFileName = matFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
thisData = load(fullFileName);
if k == 1
% Initialize with the first array.
sumOfAllData = thisData.data;
else
% Assume all data arrays are the same size and single or double, not uint8.
% add them together.
sumOfAllData = sumOfAllData + thisData.data;
end
end

5 comentarios

Pengju
Pengju el 12 de Sept. de 2014
Nice code.
BTW, do you have some code for inverse Abel transformation...
forgive me as a newcomer of Matlab...
Undefined function or method 'plus' for input arguments of type 'struct'.
sumOfAllData = sumOfAllData + thisData;
Image Analyst
Image Analyst el 12 de Sept. de 2014
Editada: Image Analyst el 12 de Sept. de 2014
Try thisData.data instead. See edited code above.
Pengju
Pengju el 12 de Sept. de 2014
aha, it works.... thanks a lot!
Image Analyst
Image Analyst el 12 de Sept. de 2014
Yeah, sorry I forgot to tell you that if you don't accept the output of load() into a variable it "poofs" variables into existence. Generally people don't like that method. If you accept the output into a variable, the variable is a structure with all the internal variables as members/fields of that structure.

Iniciar sesión para comentar.

Más respuestas (1)

Robert Cumming
Robert Cumming el 10 de Sept. de 2014
You can request the "data" variable explicitly from the file:
load ( filename, 'data' );
Note this will add a new variable "data" to the workspace, so if you load 2 files the second load will overwrite the first, to load multiple files you could do:
files = dir ( '*.mat' );
for ii=1:length(files)
fileData{ii} = load ( files(ii).name, 'data' );
end
If all the "data" are the same size you could save it in a 3D matrix (pre-allocate first).
myMatrix = nan(500,50,100); % pre-allocate with NaN
for ii=1:length(files)
load ( files(ii).name, 'data' );
if exist ( 'data', 'var' ) % this checks to see if data was loaded from the load command.
myMatrix(:,:,ii) = data;
end
clear data % to avoid it being used in the next loop...
end

3 comentarios

Pengju
Pengju el 11 de Sept. de 2014
Dear Robert,
Thanks for your valuable reply.
actually, all of the "data" as 500*500 is extracted from an image, so what I need is add all of the data files together and imagesc this final files in one image.
As your method, it can add all the data files, but can not be imagesc, as the size of the myMatrix is 500*500*100....
Would you please help me to keep the structure of the data file, then I can still imagesc it in the last step...
Yours,
Pengju
Robert Cumming
Robert Cumming el 11 de Sept. de 2014
How do you plan to put 100 (variable "data") images onto a single image?
Pengju
Pengju el 11 de Sept. de 2014
I have 100 mat files, each of them has data, which is matrix, this matrix represents one image, every image is independent to the other.
so, I need to accumulate the all the matrix to one matrix, then I load this matrix to plot it as image...

Iniciar sesión para comentar.

Categorías

Etiquetas

Preguntada:

el 10 de Sept. de 2014

Comentada:

el 12 de Sept. de 2014

Community Treasure Hunt

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

Start Hunting!

Translated by