当前位置:  开发笔记 > 编程语言 > 正文

在Matlab中读取/写入二进制文件

如何解决《在Matlab中读取/写入二进制文件》经验,为你挑选了2个好方法。

我对matlab的了解仅仅是需要了解基础,所以这可能是一个基本问题.不过它来了:

我有一个包含以二进制格式存储的数据(16位整数)的文件.如何在matlab中将其读入矢量/数组?如何在matlab中将此数据写入文件?在读取/写入大量数据(千兆字节)时是否有任何智能调整可以提高性能?



1> Azim..:

正如比尔蜥蜴写的那样,你可以使用fread将数据加载到矢量中.我只是想扩大他的答案.

阅读数据

>> fid=fopen('data.bin','rb') % opens the file for reading
>> A = fread(fid, count, 'int16') % reads _count_ elements and stores them in A.

fopenfread命令默认为整数的Little-endian [1]编码.如果您的文件是Big-endian编码,则需要将fread更改为

>> A = fread(fid, count, 'int16', 'ieee-be');

另外,如果要读取整个文件集

>> count=inf;

如果你想将数据读入矩阵,使用n

>> count=[n inf];

写数据

至于将数据传递给文件.该命令,FWRITE,在比尔的回答将写入到一个二进制文件.如果要将数据写入文本文件,可以使用dlmwrite

>> dlmwrite('data.csv',A,',');

参考

[1] http://en.wikipedia.org/wiki/Endianness

更新

    可以在Matlab中的fopenfread命令中指定二进制数据的机器格式(IE,ieee-be, ieee-le,vaxd等) .支持的机器格式的详细信息可以在Matlab的fopen文档中找到.

    Scott French对Bill的答案的评论 建议将数据读入int16变量.要做到这一点

    >> A = int16(fread(fid,count,precision,machineFormat));
    

    其中count是要读取的数据的大小/形状,precision是数据格式,machineformat 是每个字节的编码.

    请参阅命令fseek来移动文件.例如,

    >> fseek(fid,0,'bof');
    

    将文件倒回到bof代表文件开头的开头.



2> Bill the Liz..:

假设您知道文件中存储了多少个值,您可以执行类似操作将数据读入数组.

fid = fopen('data.bin','rb')
A = fread(fid, count, 'int16')

要将数据写入文件,请执行以下操作:

fid = fopen('data.bin','w')
count = fwrite(fid, A, 'int16')

fwrite函数返回写入文件的元素数(不是字节数).

就性能调整而言,您可以以块的形式读取数据,只使用您需要处理的数据.这在任何语言中都是相同的,并且没有办法加速它特定于Matlab.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有