我有一个包含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
。现在我需要如何在每次迭代时保存变量。我怎么能这样做?
答案 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开始,或其他东西。)