考虑以下示例:
time = [733774,733774,733775,733775,733775,733776,733776];
depth = [0,10,0,5,10,0,10];
d = [1,1.3,1,2.5,2.5,1,1.2];
data = horzcat(time',depth',d');
dz = 1;
这里我分三天进行了多项测量。第一天在2个不同的深度进行2次测量,第二天在3个深度进行3次测量,第3次在2个深度进行2次测量。
我想生成一个新变量'newData',它对数据中的值进行线性插值(interp1)。但是,如果任何给定日期的测量数量超过2,我只想这样做。因此,对于上面的示例,这仅适用于733775.这里我想进行深度测量并增加垂直分辨率,例如< / p>
newDepth = min(depth):dz:max(depth);
但是,只有在测量次数超过2的情况下执行此操作。因此,我所描述的结果应为:
733774 0
733774 10
733775 0
733775 1
733775 2
733775 3
733775 4
733775 5
733775 6
733775 7
733775 8
733775 9
733775 10
733776 0
733776 10
加上'data(:,3)'的插值。
实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
这是一种方法(这次解决OP的编辑版本):
[idx,~,uniqueTimes] = grp2idx(time);
counts = hist(time,uniqueTimes);
%# expand data with counts greater than minCount
minCount = 2;
dz = 1;
expandedData = mat2cell(data,counts,3)
for ii = find(counts>minCount)'
minZ = expandedData{ii}(1,2);
maxZ = expandedData{ii}(end,2);
intData(:,2) = (minZ:dz:maxZ)';
intData(:,1) = expandedData{ii}(1,1);
intData(:,3) = interp1(expandedData{ii}(:,2),expandedData{ii}(:,3),intData(:,2));
expandedData{ii} = intData;
end
out = cat(1,expandedData{:})