1

考虑以下示例:

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 次测量,第三天在 2 个深度进行了 2 次测量。

我想生成一个新变量“newData”,它线性插值(interp1)数据中的值。但是,我只想在任何给定日期的测量次数超过 2 时执行此操作。因此,对于上面的示例,这仅适用于 733775。在这里,我想进行深度测量并增加垂直分辨率,例如

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

加上来自“数据(:,3)”的插值。

实现这一目标的最佳方法是什么?

4

1 回答 1

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{:})
于 2012-09-18T07:04:20.380 回答