在使用Huffman编码或者其它压缩方式的时候经常要查询某个元素在相应的数组中出现的次数,即出现的频率。
可以通过循环来完成这项工作,但是matlab中提供了tabulate()函数,使用起来更简单快速。
以A矩阵为例:
A =
1 0 -1 1 2 0 2 0 1 -1
-1 3 -1 0 1 -1 2 -1 0 0
1 -2 2 0 0 1 -2 2 -1 0
1 3 0 2 -1 0 1 -1 0 2
0 -2 3 1 1 1 -1 0 2 5
-1 0 -3 -1 1 1 0 3 4 6
2 0 -1 -1 -1 -1 3 5 7 2
0 0 1 -2 1 3 8 9 0 -9
-1 0 -1 -1 3 7 8 2 -9 -10
0 1 1 4 5 11 3 -6 -9 -5% 将矩阵转换成向量的形式 A1 = A(:) ; %统计向量元素出现的个数 P=tabulate(A1) % 打印结果 P = -10 1 1 -9 3 3 -6 1 1 -5 1 1 -3 1 1 -2 4 4 -1 19 19 0 22 22 1 17 17 2 11 11 3 8 8 4 2 2 5 3 3 6 1 1 7 2 2 8 2 2 9 1 1 11 1 1
其中,第一列展示的是元素,第二列是出现的次数,第三列是出现的频率(因为A1有一百个元素所以第三列和第二列相同)
给出一个不同的例子如下:
B = [1,-1,1,1,0,-1,2,0,-1,0,0,3,-2,0] P=tabulate(B) B = 1 -1 1 1 0 -1 2 0 -1 0 0 3 -2 0 P = -2.0000 1.0000 7.1429 -1.0000 3.0000 21.4286 0 5.0000 35.7143 1.0000 3.0000 21.4286 2.0000 1.0000 7.1429 3.0000 1.0000 7.1429
Notes:tabulate的输入参数要求是向量,且必须是single或double类型才可以!