Load specific column from mat file
Afficher commentaires plus anciens
Hello, I got a mat file with a struct of different variables. Each variable got a 1X5 struct entry. MAT File:
a = [0 0 0 0 1]
b = [0 0 0 1 0]
c = [0 1 0 0 1]
My simulink model got different variants and each column of the matfile belongs to a variant. So I would like to load that mat file with only one column. Workspace:
a = 1
b = 0
c = 1
Is that possible? Greetings Lucas
Réponses (2)
KSSV
le 20 Nov 2017
a = a(end) ;
b = b(end) ;
c = c(end) ;
Jan
le 20 Nov 2017
This is not possible in one command, but with a tiny function:
function [a,b,c] = LoadColumn(FileName, col)
Data = load(FileName);
a = Data.a(col);
b = Data.b(col);
c = Data.c(col);
end
This might look trivial - in fact, it is. Does it solve your needs? If not, what is the remaining problem?
4 commentaires
Lucas Maiß
le 20 Nov 2017
Modifié(e) : Stephen23
le 20 Nov 2017
@Lucas Maiß: Your code is very inefficient, because of the conversion between numeric and string, and back again. You should really:
- load into a variable, as Jan Simon showed.
- Use dynamic field names instead of slow, inefficient and buggy eval:
Then you could easily avoid all of those pointless and slow conversions. Or as an alternative, here is a simpler solution using structfun:
>> a = [0 0 0 0 1];
>> b = [0 0 0 1 0];
>> c = [0 1 0 0 1];
>> save('test.mat','a','b','c')
>> S = load('test.mat');
>> T = structfun(@(v)v(end),S,'UniformOutput',0);
>> T.a
ans = 1
>> T.b
ans = 0
>> T.c
ans = 1
Lucas Maiß
le 20 Nov 2017
Jan
le 20 Nov 2017
@Lucas: @(v)v(end) is an anonymous function, which replies the last element of the input.
With a loop:
function S = LoadColumn(FileName, col)
S = load(FileName);
Field = fieldnames(S);
for iField = 1:numel(Field)
F = Field{iField};
S.(F) = S.(F)(end);
end
end
Catégories
En savoir plus sur Matrix Indexing dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!