Octave - 霍夫曼代码不起作用 - SIG 的所有元素必须是 [1,N] 范围内的整数

2024-01-17

我在使用 huffmandict 和 huffmanenco 的 Octave 中遇到问题。

这是我的错误:

错误:huffmanenco:SIG 的所有元素必须是范围内的整数 [1,N]

这是我的代码:

inputSig = [1 1 2 6 6 6 6 4 5 5];
list_symb = [1 2 6 4 5];
list_proba = [0.2, 0.1, 0.4, 0.1, 0.2];
dict = huffmandict(list_symb,list_proba);
code = huffmanenco(inputSig,dict);

我的字典是

dict =
{
 [1,1] =  1
 [1,2] = 0   1
 [1,3] = 0   0   1
 [1,4] = 0   0   0   0
 [1,5] = 0   0   0   1
}

所以我的错误在于该行

code = huffmanenco(inputSig,dict);

因为我的 dict 的长度是 5,而我的 inputSig 的长度是 10。

我怎样才能在没有这个错误的情况下进行霍夫曼编码?

不过,这段代码似乎可以在 Matlab 上运行。


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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Octave - 霍夫曼代码不起作用 - SIG 的所有元素必须是 [1,N] 范围内的整数 的相关文章

  • 如何使用Python将霍夫曼编码写入文件?

    我创建了一个 Python 脚本来使用霍夫曼算法压缩文本 假设我有以下字符串 string The quick brown fox jumps over the lazy dog 运行我的算法会返回以下 位 result 011111001
  • Matlab/Octave中所有内置符号列表

    在 Mathematica 中 我们可以获得所有内置函数的名称 例如 List通过执行命令 Names List 此外 Names context 列出指定上下文中的所有符号 例如 Names Global 给出所有内置符号的名称 以及用户
  • eig(X, 'nobalance') 的八度等效值是多少

    我试图找到马尔可夫链的平衡分布 这意味着找到代表它的转移矩阵的特征值 但是 eig函数自动标准化它返回的特征向量 在MatLab中有一个标志你可以传递给函数停止这种行为 eig X 不平衡 其中 X 是矩阵 看http www mathwo
  • 将 MATLAB 文件转换为 Octave

    我有一系列为 MATLAB 编写的实验 但最近我们尝试通过 Octave 来运行它们 我意识到它们大多是兼容的 但我遇到了一些问题 而且我发现的在线常见问题解答或说明都没有解决这些问题 这有点复杂 因为有多个 m 文件相互作用 不过 现在我
  • 在 FastCGI 和 Octave 中重新定义标准输出

    我正在努力在 Ubuntu Linux 中使用 C C 在 FastCGI 会话中实现 Octave 解释器 我遇到的问题是 FCGI 重定向stdout to FCGI 标准输出 但预编译的 Octave 头文件仍然使用正常的stdout
  • matlab/octave - 广义矩阵乘法

    我想做一个函数来概括矩阵乘法 基本上 它应该能够执行标准矩阵乘法 但它应该允许通过任何其他函数更改两个二元运算符的乘积 和 目标是在 CPU 和内存方面尽可能高效 当然 它的效率总是低于 A B 但操作员的灵活性是这里的重点 这是我阅读后可
  • 使用 matlab/octave 将图像从 rgb 转换为 hsv 回 rgb

    我正在尝试将彩色图像从 RGB 转换为 HSV 进行更改 然后再转换回 RGB 作为测试 我编写此代码只是为了测试如何从 rgb 到 hsv 返回到 rgb 但是当我查看图像时 它只是显示为黑色 我缺少什么 PS我使用的是octave 3
  • Objective-C 和 MATLAB/Octave 文件扩展名之间的重叠

    Objective C 或 MATLAB Octave 是否有源文件扩展名 m 我问这个问题是因为我将 Hello World 程序放在一个文件夹中 而我不能有两个hello m files 我看到的唯一方法是为每个程序创建子目录并将文件放
  • 如何生成x的前20次方?

    所以 我有 X 一个 300 1 向量 我想要 1 X X X X X X X X X 300 20 矩阵 我该怎么做 X 2 1 X X X X X X ans 2 4 8 1 1 1 这可行 但我无法面对将整个内容打出来 我肯定不需要写
  • 近似保序霍夫曼码

    我正在做算法和数据结构课程的作业 我无法理解给出的说明 我会尽力解释这个问题 我给出的输入是一个正整数n其次是n正整数 表示有序字符集中符号的频率 或权重 第一个目标是构造一棵树 为有序字符集中的每个字符提供近似的保序霍夫曼代码 我们要通过
  • 从 GNU Octave 中的矩阵中删除一列

    在 GNU Octave 中 我希望能够从矩阵中删除特定的列 为了一般性 我还希望能够从矩阵中删除特定行 假设我有这个 mymatrix eye 5 mymatrix Diagonal Matrix 1 0 0 0 0 0 1 0 0 0
  • 如何从 jpeg 文件中的 FFC4 (DHT) 标头创建霍夫曼树?

    我以为我可以自己解决这个问题 但我似乎根本没有进展 好的 背景 我需要根据 jpg 文件中的 FFC4 DHT 定义霍夫曼表 标头提供的信息创建霍夫曼代码树 DHT 标头以这种方式定义 Huffman 表 1 一系列16字节 每个字节定义有
  • MATLAB 求最大值一个结构体的

    我试图找到结构的最大值但是max tracks matrix 不起作用 它给我以下错误 使用 horzcat 时出错 CAT 论证维度不一致 你有想法吗 这是我的结构的样子 tracks 1x110470 struct array with
  • 从 Octave 导出的图中具有透明背景

    我在 Win 10 下使用便携式 Octave 5 1 0 我的意思是写一个具有透明背景的 png 绘图 免责声明 这个问题与下面链接的两个问题类似 我选择了提出当前不同的问题 https meta stackoverflow com qu
  • matlab中的分箱

    我一直无法在 matlab 或 Octave 中找到函数来完成我想要的操作 我有一个两列的矩阵 m x 和 y 值 我知道我可以通过执行 m 1 或 m 2 来提取列 我想将其分成 可能 大小相等的较小矩阵 并绘制这些矩阵的平均值 换句话说
  • 双击时将文件名传递给 Windows 批处理 (.bat) 脚本,以便它将以八度运行

    我是使用批处理脚本的新手 并且对八度音程有一定的经验 我有很多使用八度函数检查的数据文件 我正在尝试进行设置 以便我可以双击具有自定义扩展名的文件来直接打开八度函数 想想 当我双击这个文本文件时 它会在记事本中打开 为此 我写了一个非常基本
  • 无需构建树即可预测霍夫曼压缩比

    我有一个二进制文件 我知道其中每个符号出现的次数 如果我要使用霍夫曼算法压缩它 我需要预测压缩文件的长度 我只对假设的输出长度感兴趣 而不对单个符号的代码感兴趣 因此构建霍夫曼树似乎是多余的 作为一个例子 我需要得到类似的东西 包含 4 个
  • 如何创建用于霍夫曼编码和解码的树?

    对于我的作业 我将对霍夫曼树进行编码和解码 我在创建树时遇到问题 并且陷入困境 不要介意打印语句 它们只是让我测试并查看函数运行时的输出是什么 对于第一个 for 循环 我从主块中用于测试的文本文件中获取了所有值和索引 在第二个 for 循
  • 如何调整x轴和y轴的大小

    如何调整 x 轴和 y 轴的大小 我想要什么 更具体 3900 60 30 0 60 120 180 3600 我做了什么 a 0 0 1 10000 plot a 我应该写什么才能按预期调整 x 和 y 轴的大小 EDIT 我不想 390
  • 机器学习鸡尾酒会音频应用

    我对这篇文章有一个疑问 鸡尾酒会算法 SVD 实现 用一行代码 https stackoverflow com questions 20414667 cocktail party algorithm svd implementation i

随机推荐