سلام.
توزیع تجمعی یعنی وقتی PMF را محاسبه کردید بعد آن مقدار هر اندیس در CDF برابر است با مقدار مجموع همه PMF های کوچکتر و مساوی با آن اندیس می باشد.
اگر PMF به صورت زیر باشد:
CDF به صورت زیر خواهد شد.
کد C++ محاسبه CDF به صورت زیر می باشد:
#include "stdafx.h"
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <numeric>
using namespace std;
void computePMF(const vector<int> &src,vector<float> &dst){
float sum = (float)std::accumulate(src.begin(), src.end(), 0);
dst.resize(src.size());
for (size_t i=0; i < src.size();i++)
dst[i] = src[i] / sum;
}
void computeCDF(const vector<float> pmf,vector<float> &cdf){
cdf.resize(pmf.size());
float sum=0;
for (size_t i=0; i < pmf.size();i++){
cdf[i] = sum + pmf[i];
sum += pmf[i];
}
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> hist(10);
for (auto &item : hist)
item = rand()%5;
vector<float> pmf;
computePMF(hist,pmf);
vector<float> cdf;
computeCDF(pmf,cdf);
for (auto item :cdf)
cout << item << endl;
return 0;
}