简体   繁体   English

如何计算数组中一系列自然数之间的重复数

[英]How count the number of repeated numbers between a range of natural numbers in an array

I have a sorted (Ascending trend) array as 我有一个排序(升序)数组

[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]

I want to check and print the number of the repeated numbers between each "natural numbers". 我想检查并打印每个“自然数”之间的重复数。

for example: 例如:

between 1 and 2: 0 (no repeated) 在1和2之间:0(不重复)

between 2 and 3: 3 repeated with 2.4 在2和3之间:3重复2.4

between 3 and 4: 0 3至4之间:0

between 4 and 5: 2 repeated with 4.3 在4到5之间:以4.3重复2

between 5 and 6: 0 5至6之间:0

between 6 and 7: 0 6至7之间:0

Is there any function in MATLAB to do this task? MATLAB中有任何函数可以执行此任务?

you can use tabulate , and the array need not be even sorted for that. 您可以使用tabulate ,甚至不需要为此对数组进行排序。 Then just select the proper elements using logical conditions. 然后只需使用逻辑条件选择适当的元素。 For example: 例如:

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

the alternative is to use histc . 另一种方法是使用histc So if your vector is stored in a then 因此,如果您的向量存储在

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)]

Then you can work with the result matrix by checking if there are any numbers between natural numbers 然后,您可以通过检查自然数之间是否存在任何数来使用结果矩阵

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM