vxs*_*122 1 c matlab histogram
假设我从这里使用dictionary.txt(单词词典),这个C代码产生如下数据:
#include <stdio.h>
int main ( void )
{
FILE *dictionary = fopen ( "dictionary.txt", "r" );
char entry[46];
unsigned value = 0;
while ( fscanf ( dictionary, "%s", entry ) != EOF ) {
for ( int i = 0; entry[i]; ++i )
value += entry[i];
printf ( "%d"\n", value );
value = 0;
}
fclose ( dictionary );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码的作用是,对于字典中的每个单词,它产生一个值,该值是每个字母的所有ASCII值的总和.
编译之后,我创建了一个收集终端上所有值的data.txt:
$ ./dictionary > data.txt
Run Code Online (Sandbox Code Playgroud)
在MATLAB上:
fileID = fopen ( 'data.txt', 'r' );
formatSpec = '%u';
A = fscanf ( fileID, formatSpec );
fclose(fileID);
X = min(A):max(A);
hist ( A, X )
Run Code Online (Sandbox Code Playgroud)
其中输出如下所示的直方图:

您正在绘制的是文本文件中以空格分隔的字符串的累加ASCII值的直方图.按照这个名称我假设它是一个英文单词词典.
英语主要用小写字母书写,其中包含从97(a)到122(z)的ASCII码,平均为110(不考虑字母频率).直方图显示距离也约为110的峰.因此,不同的峰对应于不同长度的字.可辨别的峰似乎对应于从1到大约21个字母 更新的字长: 4到12个字母,最常见的字长为8个字母.
单峰的形状大致是正态分布的形状,这可以通过从约'a'到'z'的范围"随机"选择不同字母的事实来解释.虽然这些选择肯定不是独立的和相同的分布,但仍然会出现类似于中心极限定理所描述的效果.
问题编辑后更新:文件确实是英文单词列表,每行一个,全部用小写字母书写.进一步分析:
所有单词的字母的ASCII值在字典中具有以下绝对频率:

所有出现的值都在97(a)和122(z)之间.平均值为107.5,标准偏差为6.89.
字典中字长的频率为:

我在上面的解释是,最常见的字长是8,这是正确的,但字长的范围实际上是4到12.问题中更新的直方图与此一致.
现在,如果我们通过从所有字母的池中随机绘制来模拟4个,8个和12个字母的单词,然后绘制ASCII-sum直方图,这就是结果:

它表明,不同长度的单词不仅导致峰值不同(这里:430,860和1290),而且导致不同宽度(这里:标准差13.78,19.49和23.91)以及相应的不同高度.
因此,您在直方图中看到的图片是字长直方图和不同字长的ASCII值之和的组合.
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |