Allocating 500 matrices into one 3D array with a loop
1 次查看(过去 30 天)
显示 更早的评论
Hello guys, I have about 500 matrices naming after "yfit" + yr/month/date (such as yfit20000115). I want to save all of them into one 3d array, here is my code:
x = zeros(1455,1464,500);
x(:,:,1) = yfit20000115;
x(:,:,2) = yfit20000131;
x(:,:,3) = yfit20000216;
x(:,:,4) = yfit20000303;
x(:,:,5) = yfit20000319;
x(:,:,6) = yfit20000404;
........................ until x(:,:,500)
Can anybody please tell me how to loop through this? Especially, I do not know how to put the names into the loop. I thought about using EVAL, but eval's instruction on matlab seems very short and simple. Please help, thank you!
4 个评论
Stephen23
2017-11-20
编辑:Stephen23
2017-11-20
@Zoe: simply load the .mat file into one output variable (which is a structure), then loop over the fields of that structure. See Nicolas Schmit's answer to know how to do this.
Do NOT load 500 individual arrays into your workspace and then try to use eval to access them, unless you want to write slow, buggy, complex, inefficient, hard-to-debug code. Read this to why doing that is a very inefficient way to write code:
采纳的回答
Nicolas Schmit
2017-11-20
Use
S = load('your_mat_file');
To load your data into a structure S, Then loop over the fields of S.
fields = fieldnames(S);
x = zeros(1455,1464,500);
for k=1:500
x(:, :, k) = S.(f{k});
end
2 个评论
Jan
2017-11-20
Or:
S = load('your_mat_file');
fields = fieldnames(S);
[fields, index] = sort(fields);
match = strncmp(fields, 'yfit', 4);
dataCell = struct2cell(S);
x = cat(3, dataCell{index});
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!