2015-11-08 58 views
0

我有一个复杂值的二进制方阵,存储在.bin格式文件中。我曾尝试用MATLAB脚本阅读本为100×100矩阵:从Matlab中的文件读取二进制矩阵

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

此代码不能正确读取包含在A复数值。我只得到一个100乘100的整数矩阵。

+0

在我的代码中输入错误:i = fopen('matrix.bin','r') A = fread(i,[100 100]) – Maya

+0

“bin”文件的格式是什么?复杂数据如何存储? – rayryeng

+0

bin文件是由一个计算器生成的,它包含一个复杂的矩阵,它不可能显示这个文件的内容。 你是什么意思的bin格式? – Maya

回答

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数据类型中。如果文件大小是其他数字,那么它可能意味着一些附加信息存储在二进制文件中。您必须知道附加信息的存储情况,以便您可以正确读取文件。