0

解決しようとしている問題について質問があります。

列1に4、4.2、4.4、16、16.5、16.7などの範囲の一連の数字と、列1が5 と言って、列 2 は 0 とします。以下は、私が使用しているマトリックスの非常に小さなバージョンです。

[5,0;5.10000000000000,0;5.20000000000000,0;5.25000000000000,0;5.30000000000000,0;5.35000000000000,0;5.45000000000000,0;5.50000000000000,0;5.55000000000000,0;5.60000000000000,0;14.2000000000000,0;5.70000000000000,0;5.80000000000000,0;5.90000000000000,0;14.0000000000000,0;14.9500000000000,1;14.8500000000000,1;14.6000000000000,1;14.3500000000000,1;14.3000000000000,1;14.2500000000000,1;14.3500000000000,1;14.2500000000000,1;14.1500000000000,1;14.0500000000000,1;]

私がやりたいことは、列 1 の各整数に対して列 2 の 0 と 1 を平均化するコードを書くことです。正直なところ、どこから始めればよいかわかりません。for ループを書き始めましたが、aa をどのように実行するかわかりませんでした。列1の行のグループに基づいて、列2の行のグループを処理します。誰かアイデアはありますか? 申し訳ありませんが、まだサンプル コードがありません。正直なところ、この時点で何をすべきかわかりません。

4

2 に答える 2

2

私はこのようなことをします:

integers = floor(inputMatrix(:,1));
uniqueIntegers = unique(integers);
K = numel(uniqueIntegers);

outputMean = nan(1,K);
for k = 1:K
    outputMean(k) = mean(inputMatrix(integers==uniqueIntegers(k),2)));
end

ここで、inputMatrix は上記のマトリックスです。平易な英語では、関数を使用して最初の列を整数に変換floorし、一意の値を選択してから、一意の値をループし、論理インデックスを使用して平均を見つけます。2 つのベクトルuniqueIntegersoutputMeanには、これらの整数と 2 番目の列の平均値がそれぞれ含まれます。

コメントで示唆されているように、質問を読むにはいくつかの方法があると思います。まず、上記の回答のように、OP は小数点以下の左側に 5 があるすべてを平均化することを望んでいます。

ただし、OP が 5 (または他の整数) を含む値のみを平均化したい場合は、ループ内の値を次のように置き換えます。

outputMean(k) = mean(inputMatrix(inputMatrix(:,1)==uniqueIntegers(k),2)));

ただし、値が何であるかに関係なく、OP が整数を含むすべての値を一緒に平均化したい場合は、コード ブロック全体を次のように減らすことができます。

integers = floor(inputMatrix(:,1)) == inputMatrix(:,1);
outputMean = mean(inputMatrix(integers,2));
于 2013-10-17T19:44:47.280 に答える
2

私の理解が正しければ、最初の列に同じ整数部分を持つ 2 番目の列のすべての値の平均が必要です。

これは、前の質問への回答を少し変更することで実現できます。あなたのデータにしましょうx(2列、任意の行数)。それで:

x1_int = floor(x(:,1));
[value_sort ind_sort] = sort(x1_int);
[~, ii, jj] = unique(value_sort);
n = diff([0; ii]);
result = [ x1_int(ii) accumarray(jj,x(ind_sort,2))./n ];

Matlab 2013a 以降を使用している場合は、3 行目を次のように置き換えます。これは、unique関数が Matlab 2013a で変更されたため必要です。

[~, ii, jj] = unique(value_sort,'legacy');

変数resultの列 1 には の列 1 の整数部分が含まれ、x列 2 には の列 2 の対応する平均が含まれますx。あなたのサンプルデータで:

x= [5.0000         0
    5.1000         0
    5.2000         0
    5.2500         0
    5.3000         0
    5.3500         0
    5.4500         0
    5.5000         0
    5.5500         0
    5.6000         0
   14.2000         0
    5.7000         0
    5.8000         0
    5.9000         0
   14.0000         0
   14.9500    1.0000
   14.8500    1.0000
   14.6000    1.0000
   14.3500    1.0000
   14.3000    1.0000
   14.2500    1.0000
   14.3500    1.0000
   14.2500    1.0000
   14.1500    1.0000
   14.0500    1.0000]

結果は

result =

    5.0000         0
   14.0000    0.8333
于 2013-10-17T22:51:49.343 に答える