从Matlab中的文件中读取二进制矩阵

时间:2015-11-08 23:36:40

标签: matlab matrix binary binaryfiles

我有一个复数值的二进制方阵,存储在.bin格式文件中。我试图用Matlab脚本读取这个100×100的矩阵:

i=fopen('matrix.bin','r')
A=fread(i,[100 100]

此代码无法正确读取A中包含的复杂值。我只得到一个100乘100的整数矩阵。

1 个答案:

答案 0 :(得分:0)

MATLAB fread支持ANSI C类型,但没有表示复数的本机ANSI C类型。最有可能的是,复数存储为一对实数和虚数。

如果没有关于如何保存二进制文件的信息,您仍然可以执行一些测试来解决这个问题。如果复数表示为实部和虚部,并且都以double精度表示,那么单个复数将占用8 + 8 = 16个字节。我们可以通过导航到文件的末尾来测试它,看看有多少字节。

fID = fopen('matrix.bin','r')
fseek(fID, 0, 'eof')      % Go to the end of file
ftell(fID)                % Tell current position in the open file
fclose(fID)

如果这个数字等于16 * 100 * 100 = 160000,那么你很幸运。此文件中没有保存额外的内容,您只需通过以下代码读取数据:

fID = fopen('matrix.bin','r')
data = []
for ii = 1:10000
    data = [data; fread(fID, 2, 'double')']
end
fclose(fID)

最终会得到10000 * 2数组,每行代表一个复数。如果文件大小为80000,那么实部和虚部都可以保存在single数据类型中。如果文件大小是其他数字,则可能意味着一些附加信息存储在二进制文件中。您必须知道存储了哪些附加信息,以便您可以正确读取文件。