MATLAB:从结构中提取数据并放入自定义大小矩阵

时间:2012-03-23 14:59:06

标签: matlab structure data-extraction

我有一个文件,filedata.mat,包含一个1x1结构,其子级别包含来自车辆通道的数据。该文件有近30个测量通道。通道名称,通道单元和通道值(与时间)存储在单独的子级别中。

我想按列号指定哪些通道(即哪些数据列),并让代码将数据放在矩阵中,第1行中的通道名称和第2行中的通道单元。

我目前的代码如下:

clear all;

channels = [1 4 8];

source = load('filedata.mat');

N = size(channels,2);
I = size(source.Data.DataOut,1) + 2;
data = zeros(I,N);

for i = (1:1:I)
    for n = (1:1:N)
        if i == 1
           data(i,n) = source.Data.ChannelNames{channels(n)};
        elseif i == 2
           data(i,n) = source.Data.ChannelUnits{channels(n)};
        else
           data(i,n) = source.Data.DataOut{i,channels(n)};
        end
    end
end

我的想法是,这会将频道名放在第1行(即当i = 1时),第2行中的频道(当i = 2时),然后将所有剩余的数据行放到i = I。

然而,当我运行此代码时,我收到错误“Subscripted assignment dimension mismatch”。第14行是:

 data(i,n) = source.Data.ChannelNames{channels(n)};

如果有人可以提出解决方案 - 或许更重要的是 - 解释我哪里出错了(所以我可以学到一些东西!)我真的很感激。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我假设您的ChannelNames是字符串的单元格数组。因此语句source.Data.ChannelNames{channels(n)}返回一个无法分配给data中的数值的字符串。

如果要选择通道名称并将它们保存在变量中,请将此变量设为单元格数组。然后

data = cell(I,N);
data(1,:) = source.Data.ChannelNames(channels);
data(2,:) = source.Data.ChannelUnits(channels);
data(3:I,:) = num2cell(source.Data.DataOut(:,channels));