如何在matlab上过滤和保存每个变量

时间:2016-04-13 14:42:36

标签: matlab

我有一个包含3列的数据(矩阵):DATA=[ID , DATE, Value] 我希望按ID过滤我的数据,例如DATAid1= DATA,其中ID==1等等。 为此,我在MATLAB中编写了这段代码

load calibrage_capteur.mat
data = [ID ,DATE , Valeur]
minid = min(data(:,1));
maxid = max(data(:,1));
for i=minid:maxid

ind=find(data(:,1) == i)
dataID = [ID(ind) ,DATE(ind) , Valeur(ind)]

end

因此,他在此示例中注册了最后一个值ID=31,因此他注册了dataId31。现在我需要如何在每次迭代时保存变量。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

您需要使用单元格数组来保存数据,而不是将它们保存为基于ID命名的独立变量。

data_by_ID = cell();
ids = minid:maxid;

for k = 1:numel(ids)
    data_by_ID{k} = data(data(:,1) == ids(k),:);
end

但实际上,取决于您使用它做什么,您可以一直使用data,因为所有操作在数字矩阵上的速度都比在单元阵列上快。

%// Do stuff with data ID = 10
do_stuff(data(data(:,1) == 10, :));

<强>更新

如果您绝对必须为您的变量命名,您可以执行以下操作(但请不要执行此操作并使用上述方法之一)。

for k = 1:numel(ids)
    eval(['dataId', num2str(ids(k)), '= data(k,:);']);
end

答案 1 :(得分:0)

您的问题有点不清楚,但听起来您只是想在for循环的每次迭代中保存结果。

我假设min和max id是任意的,不一定是你想要索引的变量。

    kk = min_id:max_id;
    dataID=nan(size(kk));
    for ii = 1:numel(kk)
       ind=find(data(:,1) == kk(ii))
       dataID(kk) = [ID(ind) ,DATE(ind) , Valeur(ind)]
    end

这比通过min_id或max_id索引更好,因为它不清楚min_id从1开始(可能从0开始,或其他东西。)