1

私はソートされた(昇順傾向)配列を持っています

[1 1 1 1 1 1.2 1.6 2 2 2 2.4 2.4 2.4 2.6 3 3.5 3.6 3.8 3.9 4 4.3 4.3 4.6 5 5.02 6 7]

各「自然数」間の繰り返し数を確認して出力したい。

例えば:

1 と 2 の間: 0 (繰り返さない)

2 と 3 の間: 3 を 2.4 で繰り返す

3 から 4 の間: 0

4 と 5 の間: 2 を 4.3 で繰り返す

5 と 6 の間: 0

6 と 7 の間: 0

このタスクを実行する MATLAB の関数はありますか?

4

2 に答える 2

5

を使用できtabulate、そのために配列をソートする必要さえありません。次に、論理条件を使用して適切な要素を選択するだけです。例えば:

A=[1 1 1 1 1 1.2 1.6 2 2 2 2.4 2.4 2.4 2.6 3 3.5 3.6 3.8 3.9 4 4.3 4.3 4.6 5 5.02 6 7]
M=tabulate(A)                  % get frequency table
id1=mod(M(:,1),1)>0;           % get indices for non integer values
id2=M(:,2)>1;                  % get indices for more than one occurrence
idx=id1 & id2;                 % get indices that combines the two above
ans=[M(idx,1) , M(idx,2)]      % show value , # of repeats

ans =
    2.4000    3.0000
    4.3000    2.0000
于 2013-04-04T20:55:22.293 に答える
2

別の方法は、 を使用することhistcです。したがって、ベクトルがに格納されている場合

h = histc(a,a); % count how many times the number is there, the a should be sorted
natNumbers = (mod(a,1)==0) .* h;
nonnatNum = (mod(a,1)>0).*h;
indNN = find(natNumbers>0);
indNNN = find(nonNatNumbers>1);
resultIndex = sort([indNN indNNN]);
result = [a(resultIndex);h(resultIndex)]

次に、自然数の間に数値があるかどうかを確認して、結果の行列を操作できます

于 2013-04-05T08:32:51.553 に答える