Matlab中二进制文件的读写

Matlab中二进制文件的读写,matlab,file-io,binary,Matlab,File Io,Binary,我对matlab的了解仅仅是一个需要知道的基础,所以这可能是一个基本的问题。然而,它来了: 我得到了一个包含以二进制格式存储的数据(16位整数)的文件。如何在matlab中将其读入向量/数组?如何将这些数据写入matlab中的文件?在读取/写入大量数据(GB)时,是否有任何智能调整来提高性能速度?我通常不喜欢在响应中看到链接,但这看起来非常接近: 至于性能调整的第二部分,我已经6年没有使用Matlab了,所以我不知道 HTH假设您知道文件中存储了多少值,您可以执行类似的操作将数据读入数组 fi

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


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

我通常不喜欢在响应中看到链接,但这看起来非常接近:

至于性能调整的第二部分,我已经6年没有使用Matlab了,所以我不知道


HTH

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

fid = fopen('data.bin','rb')
A = fread(fid, count, 'int16')
要将数据写入文件,请执行以下操作:

fid = fopen('data.bin','w')
count = fwrite(fid, A, 'int16')
fwrite函数返回写入文件的元素数(不是字节数)

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

如前所述,您可以使用fread将数据加载到向量中。我只想对他的答案做一点扩展

读取数据 命令fopen和fread默认为整数的小端[1]编码。如果您的文件是Big-endian编码的,则需要将fread更改为

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

>> count=inf;
如果要将数据读入具有n列的矩阵,请使用

>> count=[n inf];
写入数据 至于将数据写入文件。应答命令fwrite将写入二进制文件。如果要将数据写入文本文件,可以使用dlmwrite

工具书类 [1]

更新
  • 机器格式(即ieee be、, 二进制数据的ieee le、vaxd等)可以在 Matlab中的fopen或fread命令。受支持项目的详细信息 机器格式可在中找到 Matlab的fopen文档

  • 评论 建议将数据读入 int16变量。使用

    >> A = int16(fread(fid,count,precision,machineFormat));
    
    其中,count是一个对象的大小/形状 要读取的数据,精度为 数据格式和机器格式 是每个字节的编码

  • 请参见命令fseek在文件中移动。比如说,

    >> fseek(fid,0,'bof');
    
    将文件倒带到bof代表文件开头的地方


  • 请注意,fread的'int16'参数将以int16的形式读取数据,但会将每个数据的精度提高一倍,这可能会对性能造成重大影响。根据您对数据所做的操作,您可能希望使用“*int16”,它将int16读入int16类型的变量。
    >> dlmwrite('data.csv',A,',');
    
    >> A = int16(fread(fid,count,precision,machineFormat));
    
    >> fseek(fid,0,'bof');