Matlab中二进制文件的读写
我对matlab的了解仅仅是一个需要知道的基础,所以这可能是一个基本的问题。然而,它来了:Matlab中二进制文件的读写,matlab,file-io,binary,Matlab,File Io,Binary,我对matlab的了解仅仅是一个需要知道的基础,所以这可能是一个基本的问题。然而,它来了: 我得到了一个包含以二进制格式存储的数据(16位整数)的文件。如何在matlab中将其读入向量/数组?如何将这些数据写入matlab中的文件?在读取/写入大量数据(GB)时,是否有任何智能调整来提高性能速度?我通常不喜欢在响应中看到链接,但这看起来非常接近: 至于性能调整的第二部分,我已经6年没有使用Matlab了,所以我不知道 HTH假设您知道文件中存储了多少值,您可以执行类似的操作将数据读入数组 fi
我得到了一个包含以二进制格式存储的数据(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]
更新
>> A = int16(fread(fid,count,precision,machineFormat));
其中,count是一个对象的大小/形状
要读取的数据,精度为
数据格式和机器格式
是每个字节的编码>> 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');