我正在使用英特尔Fortran和Visual Studio 2008 SP1。
我的主要问题是:我想将Matlab .mat文件中的2D数组读入fortran。另外,将Fortran 2D matricies的输出保存到最好的.mat文件,因为目前我可以使用以下命令将其保存到文本文件中:
write(unit = #, <linelength>F22.8>),matrixname
这条线有效,但我不确定是否松开了我的双倍精度。如果我没有松动精度,我可以坚持下去,否则我需要帮助。而且我只需要一种方法从Matlab文件读取到intel-fortran并保持精度。这些数组中没有字符,它们具有数值。
我需要保持精度,因为我正在使用球面函数,它们可能非常不同。
答案 0 :(得分:2)
matlab的内部“.mat”是“可能”或“可能不”压缩,具体取决于版本。我想你不想将它用于便携式文件传输。 (试图找到关于这个主题的好文档,我想知道@HPM在他的评论中是否有讽刺......)
对单个数组保持简单的方法就是简单地以原始二进制形式进行交换。在matlab中编写示例:
a=[1. 2. ; 3. 4. ]
fileID = fopen('test.bin','w');
fwrite(fileID,a,'double');
fclose(fileID);
然后在fortran
implicit none
double precision a(2,2)
open(unit=100,'test.bin',access='stream',form='unformatted')
read(100)a
注意这里的数据实际上是“平坦的”,阅读程序需要知道数组维度。如果需要,您当然可以将尺寸写入文件。
当然,二进制数据存在许多潜在的可移植性问题,但这对于大多数情况都适用,假设您在同一硬件上进行读/写操作。