2017-02-28 7 views
0

私はExcelからMatlabにデータを移動する作業をしています。私は複数の基準に基づいて平均したいデータがあります。これをループすることで実現できますが、可能であれば行列操作でのみ行いたいと考えています。返しAVERAGEIFS関数はどのようにMATLABに変換できますか?

data=[ 
    1 3 
    1 3 
    1 3 
    2 3 
    2 6 
    2 9]; 

accumarray(data(:,1),data(:,2))./accumarray(data(:,1),1); 

:アイテム12の平均値に対応する

3 
6 

、次のように

はこれまでのところ、私はaccumarray使用して、単一の基準でそうするために管理していますそれぞれ、私はこの平均化に含める必要がある少なくとも3つの他の列を持っていますが、どのように追加することができないのか分かりません。

答えて

0

あなたの単一の列のために、あなたは行インデックスを使用することができ、あなたは第4の入力、複数列の場合

mu = accumarray(data(:,1), data(:,2), [], @mean); 

としてmeanに関数ハンドルを提供することができ、二回accumarrayを呼び出す必要はありませんaccumarrayの2番目の入力として使用し、匿名関数内のデータを使用して、操作対象のデータの行にアクセスします。

data = [1 3 5 
     1 3 10 
     1 3 8 
     2 3 7 
     2 6 9 
     2 9 12]; 

tmp = accumarray(data(:,1), 1:size(data, 1), [], @(rows){mean(data(rows,2:end), 1)}); 
means = cat(1, tmp{:}); 
% 3.0000 7.6667 
% 6.0000 9.3333 
関連する問題