C

时间:2015-12-28 13:25:07

标签: c histogram frequency

我想制作一种频率直方图。我有一个二进制文件描述一首歌曲,其中双精度介于-1和1之间(如-0.001235),我想制作一个函数,它给出了0.9和1之间的值的数量。但是在不容易的地方,间隔的空间可以改变。

就像,我希望介于-1和1之间的40或50或100间隔,并在这些间隔中提示双倍数。一切都清楚了吗? ^^'

例如:[ - , - 0.9] - > 152个值.... [ - 0.9,-0.8] - > 34个值......

我已经有一个1024频率的数组double (*tab)[1024];感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

首先,您需要一个函数来计算表格中间隔中的所有频率:

int countinterval( double *tab, int tabsize, double min, double max )
{
    int count = 0;
    for ( int i = 0; i < tabsize; i ++ )
    {
        if ( tab[i] >= min && tab[i] < max ) // test if frequency is in interval [min,max[
        // if ( tab[i] >= min && tab[i] <= max ) // test if frequency is in interval [min,max]
            count ++;
    }
    return count;
}

接下来,您需要一个对每个表的结果求和的函数。

int counttabsinterval( double *tab[], int tabsize, int tabcount, double min, double max )
{
    int count = 0;
    for ( int i = 0; i < tabcount; i ++ )
        count += countinterval( tab[i], tabsize, min, max ); // sums results
    return count;
}

为您想知道频率数的每个间隔调用该函数。

double *tab[1024];
int tabsize = ???; // <- init with size of one table
int count1 = counttabsinterval( tab, tabsize, 1024, -1.0, -0.9 );
int count2 = counttabsinterval( tab, tabsize, 1024, -0.9, -0.8 );

这是一个函数,它计算表tab的定量频率分布,其中包含表tabsize的长度,并将结果存储在长度为dist的数组distcount中。

void QuantitativeFrequencyDistribution( double *tab, int tabsize, double *dist, int distcount )
{
    int count = 0;
    double intervallAmount = 2.0 / distcount;
    for ( int i = 0; i < distcount; i ++ )
    {                            
        double min = -1.0 + i*intervallAmount;
        double max = min + intervallAmount;
        dist[i] = countinterval( tab, tabsize, min, max );
    }
}

int sizeOfTab = ?;// <- init with size of table
double *tab; // <- your table
int distcount = 20; // for example
double dist[distcount];
QuantitativeFrequencyDistribution( tab, sizeOfTab, dist, distcount );

如果您有不同长度的不同表格并且想知道所有表格的定量频率分布,则必须为每个表格调用QuantitativeFrequencyDistribution并计算结果总和。

答案 1 :(得分:0)

我做了那两个功能。计算N区间介于-1和1之间的值的显示频率

0.004517
0.030243
0.014862
0.005188
0.002289
0.026917
-0.013641
0.017395
0.032867
0.036072

我给了lb : 0.400000 min = -1.000000 - max = -0.600000 - count = 0 min = -0.600000 - max = -0.200000 - count = 0 min = -0.200000 - max = 0.200000 - count = 10 min = 0.200000 - max = 0.600000 - count = 0 min = 0.600000 - max = 1.000000 - count = 0 (例如10):

if (aaventa.value && aacantidad.value)

我有这样的结果:

var aaventa = document.getElementsByName('venta')[0];
var aaventatotal = document.getElementsByName('ventatotal')[0];
var aacantidad = document.getElementsByName('cantidad')[0];

function updateInput() {
  if (aaventa.value && aacantidad.value)
    aaventatotal.value = parseFloat(aaventa.value) * parseFloat(aacantidad.value);
  else
    aaventatotal.value = 0;

}

aaventa.addEventListener('keyup', updateInput);
aaventatotal.addEventListener('change', updateInput);
aacantidad.addEventListener('keyup', updateInput);
updateInput();