0

私はマトリックスを持っています

    1        2
    1        3
    1        4
    2        1
    2        4
    3        1

結果の行列には次のものだけが含まれている必要があります

    1        3 (number of elements that related to element 1 (2,3,4))
    2        2 (number of elements that related to element 2 (1,4))
    3        1 (number of elements that related to element 3 (1))
4

4 に答える 4

2

最も簡単な方法は、以下を使用することaccumarrayです。

  accumarray(A(:,1),A(:,2),[],@numel);

Matlabヘルプから取得:

accumarrayは、データセットの要素をグループ化し、各グループに関数を適用します。A = accumarray(subs、val)は、subsの要素をインデックスとして使用して、ベクトルvalの要素を累積することによって配列Aを作成します。subs内の要素の位置によって、累積されたベクトルに対して選択されるvalsの値が決まります。subsの要素の値は、出力の累積ベクトルの位置を決定します。

この場合、すべての要素をグループ化し、それらの数を数える必要があります。numelカウントを行います。


ちなみに、データの2番目の列はまったく必要ありません。

  accumarray(A(:,1),zeros(size(A(:,1))),[],@numel)
于 2012-06-21T13:44:58.987 に答える
0

use find(a(:,1)==1) to find row numbers with first column value as 1

于 2012-06-21T13:42:55.757 に答える
0

これは、配列インデックスと一意を使用してカウントを生成する別のアプローチです。

%demo array
a=[1 1 1 2 2 3]';
%get unique elements
b=unique(a);
%count and put into matrix
result=[b sum((a(:,ones(1,length(b))))'==b(:,ones(1,length(a))),2)];

result =

     1     3
     2     2
     3     1
于 2012-06-21T14:09:41.417 に答える
0

統計ツールボックスから集計機能を使用できます。

>> tabulate(A(:,1))
  Value    Count   Percent
      1        3     50.00%
      2        2     33.33%
      3        1     16.67%

HISTC を使用した別のソリューション:

vals = unique(A(:,1));
counts = histc(A(:,1), vals);

結果のマトリックス:

>> result = [vals counts]
result =
    1     3
    2     2
    3     1

これは、要素が から始まると想定しないという点で、ACCUMARRAY/TABULATE とは異なり1ます。私の言いたいことを理解するには、すべてのソリューションを実行する前にAas:を変更してください。A(:,1) = A(:,1)+10;

于 2012-06-23T07:44:55.180 に答える