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

如何在matlab上过滤和保存每个变量,matlab,Matlab,我有一个包含3列的数据(矩阵):data=[ID,DATE,Value] 我想按ID筛选数据,例如DATAid1=datawhereID==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 =

我有一个包含3列的数据(矩阵):
data=[ID,DATE,Value]
我想按
ID
筛选数据,例如
DATAid1=data
where
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

因此,他在本例中注册了最后一个值max
ID=31
,因此他注册了
dataId31
。现在我需要如何在每次迭代中保存变量。如何实现这一点?

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

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

for k = 1:numel(ids)
    data_by_ID{k} = data(data(:,1) == ids(k),:);
end
实际上,根据您使用它的方式,您可以一直使用
数据
,因为在数值矩阵上的所有操作都比在单元格数组上的要快

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

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


您的问题有点不清楚,但听起来您只是想在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

这比按最小id或最大id索引要好,因为不清楚最小id是否从1开始(可能从0开始,或者其他什么)。鉴于op没有最小id和最大id的数字示例,这个答案很危险/容易失败。例如,如果minid是0,或者minid是某个大数字。谢谢,但它现在已在单元格数组[309x3 double][309x3 double][309x3 double][309x3 double][309x3 double]中注册@yasserbac是的。虽然您可以将变量另存为
dataId31
,但不建议这样做。单元格数组是首选的。@yasserbac我在如何做的末尾添加了一个简短的示例,但我强烈建议您不要这样做。
    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