我有一个复数值的二进制方阵,存储在.bin格式文件中。我试图用Matlab脚本读取这个100×100的矩阵:
i=fopen('matrix.bin','r')
A=fread(i,[100 100]
此代码无法正确读取A
中包含的复杂值。我只得到一个100乘100的整数矩阵。
答案 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
数据类型中。如果文件大小是其他数字,则可能意味着一些附加信息存储在二进制文件中。您必须知道存储了哪些附加信息,以便您可以正确读取文件。