2

サイズがnx3の行列があるので、1番目と2番目の列で定義されたグループごとに3番目の行の値を合計したいと思います。

特定の例を考える

A =[0.0050    0.0050    0.0050
    0.0050    0.0050    0.0150
    0.0050    0.0050    0.0250
    0.0050    0.0050    0.0350
    0.0050    0.0150    0.0050]

行列が得られるように3番目の列を合計したいと思います

SumA = [0.05 0.05 0.8; 0.05 0.15 0.005];

accumarray(A(:、[1 2])、A(:、3))を呼び出してグループを作成しようとしましたが、エラーが返されます。最初の入力SUBSには正の整数の添え字が含まれている必要があります。

それから私は最初に作成することによって回避しようとしました

ind = A(:, [1,2])*1000;

その後

accumarray(ind, A(:,3))

しかし、5 x 15の行列が返されましたが、これは私が取得したい結果ではありません。

選択した列の組み合わせ(SQL SELECT a、b、SUM(c)FROM A GROUP BY a、bと同等)でグループ化された行を合計する方法を知っている人はいますか?

ありがとう!

4

1 に答える 1

3

[~,~,ind]=unique(A(:,1:2),'rows')に役立つ添え字/インデックス配列を提供しますaccumarray。最初の引数の添え字は、2 番目の位置 (つまり、列 vector ) を参照する必要がありますA(:,3)。インデックスではなく、2 行 5 列のデータの行列で何かを行うことを期待する理由がわかりません。

ans(ind)同じ数の行を持つ列ベクトルが返されますA

于 2013-02-20T14:53:12.310 に答える