优化代码: % 读取文本文件中的内容 text = fileread('123.txt'); % 清除文本中的标点符号和空格 text = regexprep(text, '[^\w\s]' , ''); text = regexprep(text, '\s+', ''); % 定义字母表 alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; % 初始化矩阵 mat = zeros(numel(alphabet)); % 计算每对相邻字母αβ出现频率 for k = 1:numel(text)-1 i = find(alphabet==text(k));%找出α的行数 j = find(alphabet==text(k+1));%找出β的列数 mat(i,j) = mat(i,j) + 1;%相邻字母αβ在概率矩阵的位置 end % 转换成概率矩阵,采用条件概率公式p(β|α)=p(αβ)/p(α) mats=sum(mat,2);%为了计算在前字母α为同一字母的情况下出现的频率 mats(mats==0)=1;%为了防止出现除数为0导致的NaN的现象,将sum为0的命名为不为0的数 mat = mat./mats; mat(mat == 0 ) = 1 ; % 计算概率矩阵的熵 entropy = -sum(sum(mat .* log2(mat))); % 显示结果 fprintf('信息熵:%.4f bits/symbol\n', entropy);
时间: 2024-03-10 08:46:26 浏览: 29
可以对代码进行如下优化:
1. 将读取文本文件中的内容和清除文本中的标点符号和空格的操作合并为一行代码:
```
text = regexprep(fileread('123.txt'), '[^\w\s]', '');
```
2. 将字母表的定义从字符串改为字符数组:
```
alphabet = ['a':'z', 'A':'Z'];
```
3. 在计算每对相邻字母αβ出现频率时,可以使用矩阵运算代替循环:
```
[i, j] = find(ismember(alphabet, text(1:end-1)') & ismember(alphabet, text(2:end)'));
mat = accumarray([i, j], 1, [length(alphabet), length(alphabet)]);
```
4. 在计算概率矩阵时,可以使用 bsxfun 函数实现矩阵除法:
```
mats = sum(mat, 2);
mat = bsxfun(@rdivide, mat, mats);
```
5. 在计算概率矩阵的熵时,可以使用矩阵运算代替双重循环:
```
entropy = -sum(mat(:) .* log2(mat(:) + (mat(:) == 0)));
```
优化后的代码如下:
```
text = regexprep(fileread('123.txt'), '[^\w\s]', '');
alphabet = ['a':'z', 'A':'Z'];
[i, j] = find(ismember(alphabet, text(1:end-1)') & ismember(alphabet, text(2:end)'));
mat = accumarray([i, j], 1, [length(alphabet), length(alphabet)]);
mats = sum(mat, 2);
mat = bsxfun(@rdivide, mat, mats);
mat(mat == 0) = 1;
entropy = -sum(mat(:) .* log2(mat(:) + (mat(:) == 0)));
fprintf('信息熵:%.4f bits/symbol\n', entropy);
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)