Matlab fread: imwrite大矩阵single精度有问题
发布时间
阅读量:
阅读量
前面的文章讨论了如何使用C++处理Matlab mat文件。这里我们将原始mat文件转换为二进制格式。接下来我们采用标准方法对文件流进行读取操作。
对于这类mat文件而言,在使用fwrite和fread函数时非常便捷。通过预先设定buf参数就能一次性读取数据
转成二进制文件的优势是可以完全脱离mex库依赖并增强独立性效果显著但占用空间较大具体来说将一个4MB的mat文件转换生成多个二进制文件后其总体存储空间需求达到了39MB
这个问题在于我发现使用Matlab中的fwrite函数时出现了一个bug现象原因不明当我试图通过single精度将mat文件data矩阵以binary格式保存为二进制文件时
这一操作过程中我遇到了无法解释的技术异常
fid = fopen('data.st','wb');
fwrite(fid,data,'single');
当data中的数值较小时(在我的实验中发现,当数值低于0.1时),以二进制格式保存。在随后的操作中使用C++的imread函数读取该浮点类型的缓冲区时,所得结果全为接近零的极小负数值。
起初我以为精度出现了问题。然而事实证明,在Matlab中(single 和 float) 两者均占用4个字节,并未出现问题。看来没问题。假设我在将 data 写入文件之前将其放大
全部评论 (0)
还没有任何评论哟~
