Load specific column from mat file
古いコメントを表示
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
回答 (2 件)
KSSV
2017 年 11 月 20 日
a = a(end) ;
b = b(end) ;
c = c(end) ;
Jan
2017 年 11 月 20 日
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 件のコメント
Lucas Maiß
2017 年 11 月 20 日
編集済み: Stephen23
2017 年 11 月 20 日
@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ß
2017 年 11 月 20 日
Jan
2017 年 11 月 20 日
@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
カテゴリ
ヘルプ センター および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!