1

私はMatlabが初めてで、あるベクトルで同じ日付のブロックを決定し、別のベクトルで対応するデータブロックを平均化するという問題の解決策を探しています。

与えられたのは、'dd-mmm-yyyy' 形式の日付の複数のブロックで構成されるベクトルです。同じ日付のブロックは可変長にすることができます。例は

T=  ['03-Jan-2013'; 
    '03-Jan-2013'; 
    '03-Jan-2013';
    '04-Jan-2013';
    '04-Jan-2013';
    '05-Jan-2013']  

Tの各日付は、別のベクトルHのデータ エントリに対応します(簡単にするために、Tからの同じ日付はHで同じ対応する番号を持ちます) 。

H= [1;
    1;
    1;
    5;
    5;
    6]

ここでの目標は、同じ日付に対応するHの要素の平均を決定し、次のように変更された日付とデータ ベクトルToutおよびHoutを返すことです。

Tout=['03-Jan-2013'; 
     '04-Jan-2013';          
     '05-Jan-2013']  

Hout=[1;
     5;
     6]

ここで、Houtは平均値を表します。

どちらのベクトルも最初はテキストファイルから描画され、長さは約100kです。したがって、ループはおそらく最善の方法ではありません。

どんな助けにも感謝します!

4

1 に答える 1

1

unique一意の日付とその多重度を取得し、accumarray繰り返されるものを平均化するために使用します

[Tout,~,n] = unique(T, 'rows');
Hout = accumarray(n, H, [], @mean);
于 2013-09-13T09:29:57.610 に答える