【问题标题】:Read Matlab 2D array to intel-fortran and write from intel-fortran to matlab file将 Matlab 二维数组读取到 intel-fortran 并从 intel-fortran 写入到 matlab 文件
【发布时间】:2018-01-23 07:50:55
【问题描述】:

我正在使用带有 Visual Studio 2008 SP1 的 Intel Fortran。

我的主要问题是:我想将二维数组从 Matlab .mat 文件读入 fortran。此外,将 Fortran 2D 矩阵的输出保存到最好的 .mat 文件中,因为目前我可以使用以下方法将其保存到文本文件中:

write(unit = #, <linelength>F22.8>),matrixname

这条线有效,但我不确定我的双精度是否丢失。如果我不放松精度,我可以坚持下去,否则我需要帮助。而且我只需要一种从 Matlab 文件读取到 intel-fortran 并保持精度的方法。这些数组中没有字符,它们是数值。

我需要保持精度,因为我使用的是球面函数,它们可能是高度发散的。

【问题讨论】:

  • The Mathworks 为其产品发布了广泛且通常非常好的文档。我相信搜索会找到您的参考资料,向您展示如何使用 Fortran 程序读写 mat 文件。我也有信心,文档将尽可能详细和具体。
  • 如果您使用的是allocatable,它是 Fortran 90 或更高版本。欢迎。请使用tour 并阅读How to Ask。该网站非常适合回答特定问题。但是你的问题不是很具体,它要求为你写一个完整的教程。它还包含几个单独的点。我认为这个网站太宽泛了。试着让它更短更具体。我已经为你缩短了一些。
  • 回答问题的一部分,是的,如果您使用文本文件进行数据传输,您将失去精度。

标签: arrays matlab visual-studio fortran intel-fortran


【解决方案1】:

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

注意这里的数据实际上是“扁平的”,读取程序需要知道数组维度。如果需要,您当然可以将尺寸写入文件。

当然,二进制数据存在许多潜在的可移植性问题,但这适用于大多数情况下,前提是您在同一硬件上进行读/写。

【讨论】:

  • 我想知道@HPM是否在他的评论中讽刺一点也不。
猜你喜欢
  • 1970-01-01
  • 2017-12-01
  • 2016-03-03
  • 1970-01-01
  • 2011-12-24
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多