我有一个文件,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)};
如果有人可以提出解决方案 - 或许更重要的是 - 解释我哪里出错了(所以我可以学到一些东西!)我真的很感激。
提前致谢。
答案 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));