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.8
% HistRate(x),统计数组 x 中的元素出现的频数、频率和累积频率,以表格形式显示在屏幕上.
% x可以是数值型数组、字符串、字符型数组、字符串元胞数组和名义尺度数组。
%
% result = HistRate(x),返回矩阵或元胞数组result,它是多行4列的矩阵或元胞数组,
% 四列分别对应取值、频数、频率、累积频率。当x是数值型数组时,result为矩阵;当x
% 是字符串、字符型数组、字符串元胞数组和名义尺度数组时,result为元胞数组。
%
% 用户还可参考tabulate函数,该函数比tabulate函数的效率高。
%
% Copyright xiezhh,2010.3.8
if isnumeric(x)
x = x(:);
x = x(~isnan(x));
xid = [];
else
[x,xid] = grp2idx(x);
x = x(~isnan(x));
end
x = sort(x(:)); % 排序
m = length(x);
x1 = diff(x); % 求差分
x1(end + 1) = 1;
x1 = find(x1);
CumFreq = x1/m;
value = x(x1);
x = x(:);
x = x(~isnan(x));
xid = [];
else
[x,xid] = grp2idx(x);
x = x(~isnan(x));
end
x = 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])]
end
else
if isempty(xid)
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])]
end
else
if isempty(xid)
result = [value Freq1 Freq2 CumFreq];
else
result = [xid,num2cell([Freq1, Freq2, CumFreq])];
end
end
如何统计一个数组中各数字(元素)出现的频数、频率和累积频率?这里以案例形式做一个总结。
第一种方法:调用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];
else
result = [xid,num2cell([Freq1, Freq2, CumFreq])];
end
end
如何统计一个数组中各数字(元素)出现的频数、频率和累积频率?这里以案例形式做一个总结。
第一种方法:调用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
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%
i 5 12.20%
s 2 4.88%
a 5 12.20%
n 2 4.88%
u 2 4.88%
m 3 7.32%
e 2 4.88%
r 5 12.20%
c 2 4.88%
y 1 2.44%
, 1 2.44%
I 1 2.44%
f 1 2.44%
x 2 4.88%
i 5 12.20%
s 2 4.88%
a 5 12.20%
n 2 4.88%
u 2 4.88%
m 3 7.32%
e 2 4.88%
r 5 12.20%
c 2 4.88%
y 1 2.44%
, 1 2.44%
T 1 2.44%
A 1 2.44%
B 1 2.44%
L 1 2.44%
E 1 2.44%
t 1 2.44%
. 1 2.44%
复制代码
【例3】统计字符型数组中各行元素出现的频数、频率。
>> x = ['崔家峰';'孙乃喆';'安立';'王洪武';'王玉杰';'高纯静';'崔家峰';
'叶鹏';'关泽满';'谢中华';'王**';'孙乃喆';'崔家峰';'谢中华'];
>> tabulate(x)
Value Count Percent
崔家峰 3 21.43%
孙乃喆 2 14.29%
A 1 2.44%
B 1 2.44%
L 1 2.44%
E 1 2.44%
t 1 2.44%
. 1 2.44%
复制代码
【例3】统计字符型数组中各行元素出现的频数、频率。
>> x = ['崔家峰';'孙乃喆';'安立';'王洪武';'王玉杰';'高纯静';'崔家峰';
'叶鹏';'关泽满';'谢中华';'王**';'孙乃喆';'崔家峰';'谢中华'];
>> tabulate(x)
Value Count Percent
崔家峰 3 21.43%
孙乃喆 2 14.29%
安立 1 7.14%
王洪武 1 7.14%
王玉杰 1 7.14%
高纯静 1 7.14%
叶 鹏 1 7.14%
关泽满 1 7.14%
谢中华 2 14.29%
王** 1 7.14%
复制代码
【例4】统计字符串元胞数组中各字符串出现的频数、频率。
>> x = {'崔家峰';'孙乃喆';'安立';'王洪武';'王玉杰';'高纯静';'崔家峰';
'叶鹏';'关泽满';'谢中华';'王**';'孙乃喆';'崔家峰';'谢中华'};
>> tabulate(x)
Value Count Percent
崔家峰 3 21.43%
王洪武 1 7.14%
王玉杰 1 7.14%
高纯静 1 7.14%
叶 鹏 1 7.14%
关泽满 1 7.14%
谢中华 2 14.29%
王** 1 7.14%
复制代码
【例4】统计字符串元胞数组中各字符串出现的频数、频率。
>> x = {'崔家峰';'孙乃喆';'安立';'王洪武';'王玉杰';'高纯静';'崔家峰';
'叶鹏';'关泽满';'谢中华';'王**';'孙乃喆';'崔家峰';'谢中华'};
>> tabulate(x)
Value Count Percent
崔家峰 3 21.43%
孙乃喆 2 14.29%
安立 1 7.14%
王洪武 1 7.14%
王玉杰 1 7.14%
高纯静 1 7.14%
叶鹏 1 7.14%
关泽满 1 7.14%
谢中华 2 14.29%
王** 1 7.14%
复制代码
【例5】统计名义尺度(如性别,职业,产品型号等)数组中各元素出现的频数、频率。
>> load fisheriris
>> species = nominal(species);
>> tabulate(species)
Value Count Percent
安立 1 7.14%
王洪武 1 7.14%
王玉杰 1 7.14%
高纯静 1 7.14%
叶鹏 1 7.14%
关泽满 1 7.14%
谢中华 2 14.29%
王** 1 7.14%
复制代码
【例5】统计名义尺度(如性别,职业,产品型号等)数组中各元素出现的频数、频率。
>> load fisheriris
>> species = nominal(species);
>> tabulate(species)
Value Count Percent
setosa 50 33.33%
versicolor 50 33.33%
virginica 50 33.33%
复制代码
第二种方法:自编效率更高的函数HistRate(代码如下),调用HistRate函数统计一个数组中各数字(元素)出现的频数、频率和累积频率。
函数HistRate的代码:
function result = HistRate(x)
% HistRate(x),统计数组 x 中的元素出现的频数、频率和累积频率,以表格形式显示在屏幕上.
% x可以是数值型数组、字符串、字符型数组、字符串元胞数组和名义尺度数组。
%
% result = HistRate(x),返回矩阵或元胞数组result,它是多行4列的矩阵或元胞数组,
% 四列分别对应取值、频数、频率、累积频率。当x是数值型数组时,result为矩阵;当x
% 是字符串、字符型数组、字符串元胞数组和名义尺度数组时,result为元胞数组。
versicolor 50 33.33%
virginica 50 33.33%
复制代码
第二种方法:自编效率更高的函数HistRate(代码如下),调用HistRate函数统计一个数组中各数字(元素)出现的频数、频率和累积频率。
函数HistRate的代码:
function result = HistRate(x)
% HistRate(x),统计数组 x 中的元素出现的频数、频率和累积频率,以表格形式显示在屏幕上.
% x可以是数值型数组、字符串、字符型数组、字符串元胞数组和名义尺度数组。
%
% result = HistRate(x),返回矩阵或元胞数组result,它是多行4列的矩阵或元胞数组,
% 四列分别对应取值、频数、频率、累积频率。当x是数值型数组时,result为矩阵;当x
% 是字符串、字符型数组、字符串元胞数组和名义尺度数组时,result为元胞数组。
%
% 用户还可参考tabulate函数,该函数比tabulate函数的效率高。
%
% Copyright xiezhh,2010.3.8
if isnumeric(x)
x = x(:);
x = x(~isnan(x));
xid = [];
else
[x,xid] = grp2idx(x);
x = x(~isnan(x));
end
x = sort(x(:)); % 排序
m = length(x);
x1 = diff(x); % 求差分
% 用户还可参考tabulate函数,该函数比tabulate函数的效率高。
%
% Copyright xiezhh,2010.3.8
if isnumeric(x)
x = x(:);
x = x(~isnan(x));
xid = [];
else
[x,xid] = grp2idx(x);
x = x(~isnan(x));
end
x = 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 = {'取值', '频数', '频率(%)', '累积频率(%)'};
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])]
end
else
if isempty(xid)
result = [value Freq1 Freq2 CumFreq];
else
result = [xid,num2cell([Freq1, Freq2, CumFreq])];
end
end
复制代码
【例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];
>> HistRate(x)
end
else
if isempty(xid)
result = [value Freq1 Freq2 CumFreq];
else
result = [xid,num2cell([Freq1, Freq2, CumFreq])];
end
end
复制代码
【例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];
>> HistRate(x)
取值 频数 频率 累积频率
0 1 1.96% 1.96%
1 4 7.84% 9.80%
2 14 27.45% 37.25%
3 10 19.61% 56.86%
4 10 19.61% 76.47%
5 6 11.76% 88.24%
6 4 7.84% 96.08%
7 1 1.96% 98.04%
8 1 1.96% 100.00%
复制代码
【例2】统计字符串中各字符出现的频数、频率。
>> x = ['If x is a numeric array, TABLE is a numeric matrix.']';
>> HistRate(x)
ans =
0 1 1.96% 1.96%
1 4 7.84% 9.80%
2 14 27.45% 37.25%
3 10 19.61% 56.86%
4 10 19.61% 76.47%
5 6 11.76% 88.24%
6 4 7.84% 96.08%
7 1 1.96% 98.04%
8 1 1.96% 100.00%
复制代码
【例2】统计字符串中各字符出现的频数、频率。
>> x = ['If x is a numeric array, TABLE is a numeric matrix.']';
>> HistRate(x)
ans =
'取值' '频数' '频率(%)' '累积频率(%)'
'I' [ 1] [ 2.4390] [ 2.4390]
'f' [ 1] [ 2.4390] [ 4.8780]
'x' [ 2] [ 4.8780] [ 9.7561]
'i' [ 5] [12.1951] [ 21.9512]
's' [ 2] [ 4.8780] [ 26.8293]
'a' [ 5] [12.1951] [ 39.0244]
'n' [ 2] [ 4.8780] [ 43.9024]
'u' [ 2] [ 4.8780] [ 48.7805]
'm' [ 3] [ 7.3171] [ 56.0976]
'e' [ 2] [ 4.8780] [ 60.9756]
'r' [ 5] [12.1951] [ 73.1707]
'c' [ 2] [ 4.8780] [ 78.0488]
'y' [ 1] [ 2.4390] [ 80.4878]
',' [ 1] [ 2.4390] [ 82.9268]
'I' [ 1] [ 2.4390] [ 2.4390]
'f' [ 1] [ 2.4390] [ 4.8780]
'x' [ 2] [ 4.8780] [ 9.7561]
'i' [ 5] [12.1951] [ 21.9512]
's' [ 2] [ 4.8780] [ 26.8293]
'a' [ 5] [12.1951] [ 39.0244]
'n' [ 2] [ 4.8780] [ 43.9024]
'u' [ 2] [ 4.8780] [ 48.7805]
'm' [ 3] [ 7.3171] [ 56.0976]
'e' [ 2] [ 4.8780] [ 60.9756]
'r' [ 5] [12.1951] [ 73.1707]
'c' [ 2] [ 4.8780] [ 78.0488]
'y' [ 1] [ 2.4390] [ 80.4878]
',' [ 1] [ 2.4390] [ 82.9268]
'T' [ 1] [ 2.4390] [ 85.3659]
'A' [ 1] [ 2.4390] [ 87.8049]
'B' [ 1] [ 2.4390] [ 90.2439]
'L' [ 1] [ 2.4390] [ 92.6829]
'E' [ 1] [ 2.4390] [ 95.1220]
't' [ 1] [ 2.4390] [ 97.5610]
'.' [ 1] [ 2.4390] [ 100]
复制代码
行元素出现的频数、频率。
>> x = ['崔家峰';'孙乃喆';'安立';'王洪武';'王玉杰';'高纯静';'崔家峰';
'叶鹏';'关泽满';'谢中华';'王**';'孙乃喆frequency函数计算频数';'崔家峰';'谢中华'];
>> HistRate(x)
ans =
'取值' '频数' '频率(%)' '累积频率(%)'
'A' [ 1] [ 2.4390] [ 87.8049]
'B' [ 1] [ 2.4390] [ 90.2439]
'L' [ 1] [ 2.4390] [ 92.6829]
'E' [ 1] [ 2.4390] [ 95.1220]
't' [ 1] [ 2.4390] [ 97.5610]
'.' [ 1] [ 2.4390] [ 100]
复制代码
行元素出现的频数、频率。
>> x = ['崔家峰';'孙乃喆';'安立';'王洪武';'王玉杰';'高纯静';'崔家峰';
'叶鹏';'关泽满';'谢中华';'王**';'孙乃喆frequency函数计算频数';'崔家峰';'谢中华'];
>> HistRate(x)
ans =
'取值' '频数' '频率(%)' '累积频率(%)'
'崔家峰' [ 3] [21.4286] [ 21.4286]
'孙乃喆' [ 2] [14.2857] [ 35.7143]
'安立' [ 1] [ 7.1429] [ 42.8571]
'王洪武' [ 1] [ 7.1429] [ 50]
'王玉杰' [ 1] [ 7.1429] [ 57.1429]
'高纯静' [ 1] [ 7.1429] [ 64.2857]
'叶 鹏' [ 1] [ 7.1429] [ 71.4286]
'关泽满' [ 1] [ 7.1429] [ 78.5714]
'谢中华' [ 2] [14.2857] [ 92.8571]
'王**' [ 1] [ 7.1429] [ 100]
复制代码
【例4】统计字符串元胞数组中各字符串出现的频数、频率。
>> x = {'崔家峰';'孙乃喆';'安立';'王洪武';'王玉杰';'高纯静';'崔家峰';
'叶鹏';'关泽满';'谢中华';'王**';'孙乃喆';'崔家峰';'谢中华'};
>> HistRate(x)
'孙乃喆' [ 2] [14.2857] [ 35.7143]
'安立' [ 1] [ 7.1429] [ 42.8571]
'王洪武' [ 1] [ 7.1429] [ 50]
'王玉杰' [ 1] [ 7.1429] [ 57.1429]
'高纯静' [ 1] [ 7.1429] [ 64.2857]
'叶 鹏' [ 1] [ 7.1429] [ 71.4286]
'关泽满' [ 1] [ 7.1429] [ 78.5714]
'谢中华' [ 2] [14.2857] [ 92.8571]
'王**' [ 1] [ 7.1429] [ 100]
复制代码
【例4】统计字符串元胞数组中各字符串出现的频数、频率。
>> x = {'崔家峰';'孙乃喆';'安立';'王洪武';'王玉杰';'高纯静';'崔家峰';
'叶鹏';'关泽满';'谢中华';'王**';'孙乃喆';'崔家峰';'谢中华'};
>> HistRate(x)
ans =
'取值' '频数' '频率(%)' '累积频率(%)'
'崔家峰' [ 3] [21.4286] [ 21.4286]
'孙乃喆' [ 2] [14.2857] [ 35.7143]
'安立' [ 1] [ 7.1429] [ 42.8571]
'王洪武' [ 1] [ 7.1429] [ 50]
'王玉杰' [ 1] [ 7.1429] [ 57.1429]
'高纯静' [ 1] [ 7.1429] [ 64.2857]
'叶鹏' [ 1] [ 7.1429] [ 71.4286]
'关泽满' [ 1] [ 7.1429] [ 78.5714]
'谢中华' [ 2] [14.2857] [ 92.8571]
'王**' [ 1] [ 7.1429] [ 100]
复制代码
【例5】统计名义尺度(如性别,职业,产品型号等)数组中各元素出现的频数、频率。
>> load fisheriris
'取值' '频数' '频率(%)' '累积频率(%)'
'崔家峰' [ 3] [21.4286] [ 21.4286]
'孙乃喆' [ 2] [14.2857] [ 35.7143]
'安立' [ 1] [ 7.1429] [ 42.8571]
'王洪武' [ 1] [ 7.1429] [ 50]
'王玉杰' [ 1] [ 7.1429] [ 57.1429]
'高纯静' [ 1] [ 7.1429] [ 64.2857]
'叶鹏' [ 1] [ 7.1429] [ 71.4286]
'关泽满' [ 1] [ 7.1429] [ 78.5714]
'谢中华' [ 2] [14.2857] [ 92.8571]
'王**' [ 1] [ 7.1429] [ 100]
复制代码
【例5】统计名义尺度(如性别,职业,产品型号等)数组中各元素出现的频数、频率。
>> load fisheriris
>> species = nominal(species);
>> HistRate(species)
ans =
'取值' '频数' '频率(%)' '累积频率(%)'
'setosa' [ 50] [33.3333] [ 33.3333]
'versicolor' [ 50] [33.3333] [ 66.6667]
'virginica' [ 50] [33.3333] [ 100]
>> HistRate(species)
ans =
'取值' '频数' '频率(%)' '累积频率(%)'
'setosa' [ 50] [33.3333] [ 33.3333]
'versicolor' [ 50] [33.3333] [ 66.6667]
'virginica' [ 50] [33.3333] [ 100]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论