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;

ここでは、3 日間の測定結果をいくつか示します。初日は 2 つの別々の深さで 2 つの測定値があり、2 日目は 3 つの深さで 3 つの測定値があり、3 日目は 2 つの深さで 2 つの測定値があります。

データの値を線形補間 (interp1) した新しい変数「newData」を生成したいと思います。ただし、特定の日の測定数が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

プラス「data(:,3)」からの補間値。

これを達成する最良の方法は何ですか?

4

1 に答える 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 に答える