You say
因为我的dict的长度是5,而我的inputSig的长度是10。
这并不是您收到此错误的原因。从文档中:
一个限制是信号集必须严格属于“[1,N]”范围,其中“N = length (dict)”。
换句话说,您的“dict”仅包含 5 个单元格,但您的“inputSig”包含范围 [1,6] 而不是 [1,5] 内的整数。
因此,您基本上必须“重新编码”/映射范围 [1,5] 中的信号(即范围 [1,5] 将成为索引/标签,到实际符号的数组)。
E.g.
inputSig = [1 1 2 6 6 6 6 4 5 5];
list_symb = unique( inputSig );
list_proba = [0.2, 0.1, 0.4, 0.1, 0.2];
dict = huffmandict( list_symb, list_proba );
[~, idx] = ismember( inputSig, list_symb );
code = huffmanenco( idx, dict )
% code = 0 1 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0
附言。为了完成这个任务,下一个明显的问题是,考虑到整个“实际交易品种与指数”业务,您如何解码这一点。简单的;您使用解码的输出(对应于索引)并将其用作 list_symb 向量的索引向量,从而检索原始符号。 IE。:
deco = huffmandeco ( code, dict )
% deco = 1 1 2 5 5 5 5 3 4 4
list_symb( deco )
% ans = 1 1 2 6 6 6 6 4 5 5