How to load MAt file into 3D matrix

조회 수: 8 (최근 30일)
Maxim De Roeck
Maxim De Roeck 2013년 8월 9일
I want to load 516 Mat files(240x320)into a 3D Matrix A(240,320,516)
The files are called PVCWARM00071,....,PVCWARM0007516
my code so far:
A = zeros(240,320,516)
nummer=0
>> for i= 1:516
nummer = nummer +1
ext = '.MAT'
naam = 'PVCWARM0007'
file= strcat(naam,num2str(nummer),ext)
A(:,:,i) = load(file)
end
i get the error:Conversion to double from struct is not possible. i already tried to make some adjustments with struct2cell and cell2mat without result.
Can someone help?
Thanks
  댓글 수: 2
Azzi Abdelmalek
Azzi Abdelmalek 2013년 8월 9일
What is the name of your matrix in you mat file?
Maxim De Roeck
Maxim De Roeck 2013년 8월 9일
the 3d matrix is called A, the Mat files are 240x320 arrays without a name

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

채택된 답변

Evan
Evan 2013년 8월 9일
편집: Evan 2013년 8월 9일
The answer can be found in the documentation of the load function:
S = load(FILENAME) loads the variables from a MAT-file into a structure array, or data from an ASCII file into a double-precision array.
Since you already initialize A as a double, the line A(:,:i) = load(file) is attempting to save load's structure output into your 3D matrix.
If you already know the name of your variables as they are saved in your mat file, you can call load without an output argument to put them in the workspace, then save them to your 3D matrix. Again, though, it helps to know or find out the variable names when doing this:
A = zeros(240,320,516);
nummer = 0;
for i = 1:516
nummer = nummer +1
ext = '.MAT';
naam = 'PVCWARM0007';
file = strcat(naam,num2str(nummer),ext);
load(file)
A(:,:,i) = B; %if, for example, the variable's name is B
end
  댓글 수: 7
Maxim De Roeck
Maxim De Roeck 2013년 8월 9일
i fixed it:
for i = 1:516
eval(['load PVCWARM0007',int2str(i),';']);
eval (['A(:,:,i) = PVCWARM0007',int2str(i),';']);
end
thanks anyway!!
Evan
Evan 2013년 8월 9일
편집: Evan 2013년 8월 9일
The method you're using is not recommended, which is why I suggested using dynamic field references. See Azzi's link for an explanation of why eval should be avoided. You also might find this page helpful.

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

추가 답변 (1개)

Azzi Abdelmalek
Azzi Abdelmalek 2013년 8월 9일
편집: Azzi Abdelmalek 2013년 8월 9일
A = zeros(240,320,516)
nummer=0
for i= 1:516
nummer = nummer +1
ext = '.MAT'
naam = 'PVCWARM0007'
file= strcat(naam,num2str(nummer),ext)
variable_name=whos('-file',file);
x=load(file)
A(:,:,i) = x.(variable_name.name)
end
  댓글 수: 2
Maxim De Roeck
Maxim De Roeck 2013년 8월 9일
편집: Azzi Abdelmalek 2013년 8월 9일
i fixed it:
for i = 1:516
eval(['load PVCWARM0007',int2str(i),';']);
eval (['A(:,:,i) = PVCWARM0007',int2str(i),';']);
end
thanks anyway!!

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

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by