代码之家  ›  专栏  ›  技术社区  ›  AnnaR

在matlab中读写二进制文件

  •  14
  • AnnaR  · 技术社区  · 17 年前

    我对matlab的了解仅仅是基于对知识的需要,所以这可能是一个基本问题。然而,它来了:

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

    3 回复  |  直到 15 年前
        1
  •  16
  •   Community Mohan Dere    9 年前

    AS Bill the Lizard 您可以使用fread将数据加载到向量中。我只想对他的回答做一点扩展。

    阅读数据

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

    命令 FPEN 和 弗雷德 对于整数,默认为little endian[1]编码。如果文件是big endian编码的,则需要更改 弗雷德 到

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

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

    >> count=inf;
    

    如果你想用 n 列使用

    >> count=[n inf];
    

    写入数据

    关于将数据写入文件。命令, 写入文件 在 Bill's 答案将写入二进制文件。如果要将数据写入文本文件,可以使用 DLMMIT

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

    工具书类

    〔1〕 http://en.wikipedia.org/wiki/Endianness

    更新

    1. 机器格式(即 IEEE , 艾丽尔 , VAXD 等)的二进制数据可以在 FPEN 或 弗雷德 matlab中的命令。支持的详细信息 机器格式可在 Matlab的文档 FPEN .

    2. Scott French's 评论 Bill's answer 建议将数据读取到 Int16变量。这样做使用

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

      哪里 计数 是的大小/形状 要读取的数据, 精度 是 数据格式,以及 机器格式 是每个字节的编码。

    3. 查看命令 费雪 移动文件。例如,

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

      将文件倒带到开始位置 转炉炼钢 代表 文件开头 .

        2
  •  10
  •   Bill the Lizard    17 年前

    假设您知道文件中存储了多少值,您可以这样做将数据读取到数组中。

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

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

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

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

    就性能调优而言,可以将数据分块读取,以便只使用需要处理的数据。这在任何语言中都是一样的,并且没有任何方法可以加速它,这是matlab特有的。

        3
  •  0
  •   Anthony Potts    17 年前

    我通常不喜欢看到回复中的链接,但这看起来非常接近:

    http://www.mathworks.com/support/tech-notes/1400/1403.html

    关于性能调优的第二部分,我用了Matlab已经6年了,所以我不知道。

    高温高压