fortran子程序中可以用动态数组吗??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fortran子程序中可以用动态数组吗??相关的知识,希望对你有一定的参考价值。
完全可以,需要使用关键字ALLOCATE和ALLOCATABLE,具体使用方法请查阅相应参考书 参考技术A 完全可以 参考技术B 可以可以将 Fortran 数组保存为 .npy 格式吗?
【中文标题】可以将 Fortran 数组保存为 .npy 格式吗?【英文标题】:Can one save Fortran arrays in .npy format? 【发布时间】:2022-01-08 15:40:14 【问题描述】:我正在使用 Fortran 进行数值计算。 Fortran 中的通用标准是将数组保存为.dat
文件。我想偶尔将数组传输到 Python 以进行进一步操作。做这件事的方法
.dat
文件并生成一个numpy数组
在保存数组时使用 HDF5、NETCDF 等(可在 Python 中访问)
.dat
文件脚本阅读器需要根据数组的存储方式进行定制。为了便于使用,每个文件可能需要存储一个数组。
我的阵列不是那么大,所以我不喜欢使用 HDF5。但是如果没有其他选择,请告诉我。
这与Reading arrays from .npy files into Fortran 90相反
【问题讨论】:
【参考方案1】:我的MRedies NPY-for-Fortran 使用得还不够,但它似乎正是您要找的。p>
来自自述文件
Fortran 的 NPY
此 Fortran 模块允许将数字 Fortran 数组保存为 Numpy 的 .npy 或 .npz 格式。目前支持的有:
1. integer(1), integer(2), integer(4), integer(8) 2. real(4), real(8) 3. complex(4), complex(8)
*.npy 文件 将数组保存到 .npy 文件中只需调用:
call save_npy("filename.npy", array)
另外,请留意fortran standard library 上的这个pull request
另一个选项,我没有测试过
不是我的想法先看CAZT'sCAZT's *** answer评论
libnpy 似乎是一个库,它提供了使用 NumPy 的二进制格式将 C 或 Fortran 数组保存到数据文件的简单例程。
以下摘自https://scipy-cookbook.readthedocs.io/items/InputOutput.html
program fex
use fnpy
use iso_c_binding
implicit none
integer :: i
real(C_DOUBLE) :: a(2,4) = reshape([(i, i=1,8)], [2,4])
call save_double("fa.npy", shape(a), a)
end program fe
程序会创建一个文件fa.npy
,您可以按照通常的方式将其加载到python中。
但 NumPy 数组的条目现在遵循 Fortran(列优先)排序。
>>> fa = np.load('fa.npy')
>>> print fa
[[ 1. 3. 5. 7.]
[ 2. 4. 6. 8.]]
您可以使用命令在与fex.f95
相同的目录中构建带有npy.mod
和libnpy.a
的可执行文件。
gfortran -o fex fex.f95 libnpy.a
仅供参考,我在https://github.com/kovalp/libnpy偶然发现了一个更新版本的libnpy
可能的错误
来自Matthias Redies 如果您使用 libnpy 保存一些数组切片
call save_npy(a(:,1,:))
,您将不会高兴。
【讨论】:
对不起。我不明白 鉴于问题和答案来自同一个人,在我看来,它就像是一个广告,尤其是它的措辞方式。 @VladimirF 现在好点了吗? 它在第一个站点看起来真的很像。它们在 SO 上很常见。现在的答案肯定更好。鉴于拉取请求在最近几个小时内处于活动状态,等待结果可能更明智,但如果您使用结果更新答案应该没问题。 顺便说一句,即使是图书馆作者也可以这样回答,这是允许的。重点是说“你可以使用这个库以这种方式做到这一点”,而不仅仅是“这里有一个可以做到这一点的库的链接”。以上是关于fortran子程序中可以用动态数组吗??的主要内容,如果未能解决你的问题,请参考以下文章