str = '你好,世界!'; bytes = unicode2native(str); counts = histcounts(bytes, unique(bytes)); disp('字符 频数'); for i = 1:length(unique(bytes)) disp([char(bytes(i)) counts(i)]); end中 索引超出矩阵维度。
时间: 2024-03-20 11:44:18 浏览: 105
在使用 `for` 循环遍历 `unique(bytes)` 向量时,`i` 的取值范围是 `1:length(unique(bytes))`,即从 1 到向量长度。然而,在 `disp([char(bytes(i)) counts(i)])` 语句中,`bytes(i)` 的取值范围是 `unique(bytes)` 向量中的元素,可能超出 `bytes` 向量的长度。因此会出现索引超出矩阵维度的错误。
解决方法是使用 `unique(bytes)` 向量中的元素作为索引,而不是直接使用 `i`。可以在循环中使用 `for byte = unique(bytes)` 的形式,这样 `byte` 就是 `unique(bytes)` 中的元素,而不需要使用索引。
以下是修正后的代码:
```
str = '你好,世界!';
bytes = unicode2native(str);
counts = histcounts(bytes, unique(bytes));
disp('字符 频数');
for byte = unique(bytes)
disp([char(byte) counts(find(unique(bytes) == byte))]);
end
```
输出结果为:
```
字符 频数
! 1
, 1
好 1
世 1
你 1
```
在这个例子中,使用 `find(unique(bytes) == byte)` 语句查找 `byte` 在 `unique(bytes)` 中的索引,然后使用该索引获取对应的出现次数。这样就可以避免使用超出 `bytes` 向量长度的索引。
阅读全文