matlab统计 频数、频率和累积频率.doc
文本预览下载声明
matlab统计?频数、频率和累积频率
(2011-03-30 21:03:26)
function result = HistRate(x)%?? HistRate(x),统计数组 x 中的元素出现的频数、频率和累积频率,以表格形式显示在屏幕上.%?? x可以是数值型数组、字符串、字符型数组、字符串元胞数组和名义尺度数组。%%?? result = HistRate(x),返回矩阵或元胞数组result,它是多行4列的矩阵或元胞数组,%?? 四列分别对应取值、频数、频率、累积频率。当x是数值型数组时,result为矩阵;当x%?? 是字符串、字符型数组、字符串元胞数组和名义尺度数组时,result为元胞数组。%%?? 用户还可参考tabulate函数,该函数比tabulate函数的效率高。%??%?? Copyright xiezhh,2010.3.8if isnumeric(x)??? x = x(:);??? x = x(~isnan(x));??? xid = [];else??? [x,xid] = grp2idx(x);??? x = x(~isnan(x));endx = sort(x(:));??? % 排序m = length(x);x1 = diff(x);??? % 求差分x1(end + 1) = 1;x1 = find(x1);CumFreq = x1/m;value = x(x1);x1 = [0; x1];Freq1 = diff(x1);Freq2 = Freq1/m;if? nargout == 0??? if isempty(xid)??????? fmt1 = s?? %8s?? %6s??? %6s\n;??????? fmt2 = ? d???? ????? %6.2f%%???? %6.2f%%\n;??????? fprintf(1, fmt1, 取值, 频数, 频率, 累积频率);??????? fprintf(1, fmt2, [value; Freq1; 100*Freq2; 100*CumFreq]);??? else??????? head = {取值, 频数, 频率(%), 累积频率(%)};??????? [head;xid,num2cell([Freq1, 100*Freq2, 100*CumFreq])]??? endelse??? if isempty(xid)??????? result = [value Freq1 Freq2 CumFreq];??? else??????? result = [xid,num2cell([Freq1, Freq2, CumFreq])];??? endend如何统计一个数组中各数字(元素)出现的频数、频率和累积频率?这里以案例形式做一个总结。第一种方法:调用MATLAB自带的函数tabulate统计一个数组中各数字(元素)出现的频数、频率【例1】统计数值型数组中各元素出现的频数、频率。 x = [2??2??6??5??2??3??2??4??3??4??3??4??4??4??4??2??2? ?? ?6??0??4??7??2??5??8??3??1??3??2??5??3??6??2??3??5? ?? ?4??3??1??4??2??2??2??3??1??5??2??6??3??4??1??2??5]; tabulate(x(:))??Value? ? Count? ?Percent? ?? ?0? ?? ???1? ?? ?1.96%? ?? ?1? ?? ???4? ?? ?7.84%? ?? ?2? ?? ? 14? ???27.45%? ?? ?3? ?? ? 10? ???19.61%? ?? ?4? ?? ? 10? ???19.61%? ?? ?5? ?? ???6? ???11.76%? ?? ?6? ?? ???4? ?? ?7.84%? ?? ?7? ?? ???1? ?? ?1.96%? ?? ?8? ?? ???1? ?? ?1.96%复制代码【例2】统计字符串中各字符出现的频数、频率。 x = [If x is a numeric array, TABLE is a numeric matrix.]; tabulate(x)??Value? ? Count? ?Percent? ?? ?I? ?? ???1? ?? ?2.44%? ?? ?f? ?? ???1? ?? ?2.44%? ?? ?x? ?? ???2? ?? ?4.88%? ??
显示全部