0

たとえば、行列内の多数の信号と、多数のラベルを持つm [T x N] グループ化変数が与えられた場合g [ 1 x N ]L < N

すべてのラベルの平均時間信号を計算する効率的なインプレースの方法はありますか?

for ループ

ml = zeros (T,L)

for i = 1:T
    for j = 1:L
        ml(i,j) = mean ( m(i,find(g==j)) )
    end
end

それを行う簡単な方法ですが、おそらくベクトル化されたコードを使用して、より高速でクリーンな方法があるでしょうか? a) forループを取り除き、(b)一度に代入するだけm = labelled_means(m, ...)です。について読みましstatarrayたが、これは for ループよりもはるかに効率が悪いようです。

4

3 に答える 3

1

使用できますarrayfun。それはよりきれいになります、より速いかどうかはわかりません:

result = arrayfun(@(n) mean(A(:,find(g==n)),2),1:2,'UniformOutput',false);
result = reshape([result{:}],[],L)

たとえば、データで

A = [1 2 3 4;
     5 6 7 8;
     9 10 11 12];
L = 2;
g = [1 1 2 2];

これは与える

result =

    1.5000    3.5000
    5.5000    7.5000
    9.5000   11.5000
于 2013-09-23T14:32:55.223 に答える