问题标签 [f2py]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
414 浏览

python - f2py 不喜欢子程序中的显式形状数组

我正在尝试使用f2py. 该代码使用 ifort 编译得很好,但在使用 f2py 时会抛出错误。这是代码(它超过两个文件):

gdat.f90:

部分.f90:

我使用 编译它f2py -c gdat.f90 part.f90 -m part,但我得到关于 nx 和 ny 未定义的错误,例如:/var/tmp/tmp2hzU6s/src.linux-x86_64-2.7/untitledmodule.c: In function 'f2py_rout_untitled_pa​​rt': /var/tmp/tmp2hzU6s /src.linux-x86_64-2.7/untitledmodule.c:180: error: 'nx' undeclared (第一次在这个函数中使用)

显式数组的定义似乎有问题ARR。就像我说的,它在 ifort 上编译得很好。

我知道这是一段简单的代码,可以用另一种方式编写,但这只是我写的一个测试片:我实际上是在尝试编译一个更大的 fortran 模块集,这些模块在(使用来自中央模块的变量来定义边界),所以我真的很想让它工作而不是重写其他代码!

0 投票
0 回答
586 浏览

python - 尝试在 Mac OS X 上使用 f2py 时出错?

我正在尝试在我的 Mac 上使用f2py 。当我输入f2py终端时,返回:

知道如何解决这个问题吗?我安装了 numpy 和 scipy。

0 投票
3 回答
915 浏览

python - 我希望 Python 作为前端,Fortran 作为后端。我还想让 fortran 部分并行 - 最佳策略?

我有一个 python 脚本,我希望大致做到这一点:

  1. 将一些粒子位置调用到数组中

  2. 对所有 512^3 个位置运行算法以将它们分配到 NxNxN 矩阵

  3. 将该矩阵反馈给python

  4. 在 python 中使用绘图来可视化矩阵(即 mayavi)

首先我必须以串行方式编写它,但理想情况下我想并行化第 2 步以加快计算速度。什么工具/策略可以让我开始。我对 Python 和 Fortran 了如指掌,但对于如何针对我的特定问题将两者联系起来却知之甚少。目前我在 Fortran 中做所有事情,然后加载我的 python 程序 - 我想一次完成所有事情。我听说过 py2f,但我想在我进入一个特定的兔子洞之前获得有经验的人的意见。谢谢

编辑:我想要并行的东西是“令人尴尬的并行”,因为这只是 N 个粒子的循环,我想尽快通过该循环。

0 投票
1 回答
306 浏览

python-2.7 - 如何在 python 中通过 Cython 和 iso_c_bindings 使用 fortran90 子例程

直到最近,我一直在使用 IDL 来解决我的大部分计算问题。我最常用的例程之一是一些 fortran90 代码,用 C 语言包装并使用 CALL_EXTERNAL 函数从 IDL 调用(这些都不是我写的)。由于各种原因,我将大部分计算转移到 Python,但我还没有找到一个合并 fortran 代码的好方法。F2PY 似乎是最明显的方法,但实际上生成的模块似乎非常不稳定。

基本上我想知道是否有更好的方法来解决这个问题。似乎重新设计现有的 C 包装器和 Cython 以使用 Python 中的代码应该相对简单,尽管我不得不承认我完全不了解 C/Cython 并且对 python 很陌生,所以任何帮助将不胜感激.

作为参考,我在下面包含了现有的 C 包装器:

编辑: 在向其他人提到这一点后,他们建议也应该可以使用 fortran ISO_C_BINDINGS 模块直接与 Cython 交互,绕过对中间 C 包装器的需要。

0 投票
1 回答
633 浏览

python - 将 f2py 与 distutils 混合

我有一个 python 包“trees”,其中包含使用 fortran 子例程的 myscript.py 文件。

通常我用

然后我可以做

它利用了 calctree.so

如果我通过运行使用 distutils 打包所有内容

setup.py 的内容在哪里

并在 MANIFEST.in 文件中指定“include trees/calctree.f90”,我可以包含 .f90 文件,但我不知道如何在用户计算机上使用 f2py 进行编译,并放置 .so 文件在适当的地方。有人可以帮忙吗?

谢谢!

0 投票
2 回答
3067 浏览

python - F2PY 找不到模块

我很难在 Python 中使用 f2py 编译模块。

我有一个用 Fortran 编写的软件,可以在 Linux 64 位机器上很好地编译。F2Py 进一步编译了一个 Python 模块,该模块也使用 Fortran 位。

以下是 Python 模块的编译方式:

但是,一旦我想导入该模块,就会出现错误(在 Ipython 中):

老实说,我对这个错误感到困惑。搜索没有太大帮助,所以我需要在这里问你:我怎样才能让它工作?如果我将 python 模块代码放在与 mod 文件所在的目录相同的目录中,则会产生相同的错误消息。

这是我的一段(原始)代码:

如果我前段时间没记错的话,这个模块是可导入的,但似乎无法使其在 debian64 安装或 debian32bit 计算机上运行。

0 投票
1 回答
511 浏览

python - 使用 f2py 从 python 将动态向量分配到 fortran

我有以下由 python 调用的子程序的开始:

从 python 调用:libomp.cic(pos,mpart,boxsize,dim,npart)

运行python脚本时出错:

出于某种原因,当我设置npart为整数时它可以工作,但它无法npart从 python 接收并动态创建数组pos。它适用于mesh使用dim但不适用pos,为什么?它与调用它们的顺序有关吗?

0 投票
1 回答
1881 浏览

distutils - 将 F2PY 编译步骤翻译成 setup.py

我继承了一个 Fortran 77 代码,它实现了几个子例程,这些子例程通过一个程序块运行,每次运行程序时都需要通过交互式命令提示符进行大量用户输入。由于我想自动运行代码,我将所有子例程移到一个模块中,并通过 F2PY 编写了一个包装器代码。两步编译后一切正常:

这最终会创建三个文件:my_module.omy_wrapper.omy_module.modmy_wrapper.so. 这my_wrapper.so是我导入 Python 以访问旧版 Fortran 代码的模块。

我的目标是将此代码包含在更大的科学代码包中,该代码包已经setup.py用于distutils构建 Cython 模块。暂时完全忽略了 Cython 代码,我应该如何将 2 步构建转换为setup.py? 我已经能够弄清楚的关闭看起来像:

但是,这不起作用。我的编译器在 . 上抛出了许多警告my_module.f90,但它仍然可以编译(如果我使用上面的编译器调用,它不会抛出任何警告)。但是,当它尝试编译包装器时my_module.mod,即使它已成功创建,它也找不到 .

有什么想法吗?我有一种感觉,我错过了一些微不足道的东西,但文档似乎不够充实,无法表明它可能是什么。

0 投票
1 回答
195 浏览

python - 从商业库中排除对子例程的调用

我有一个包含许多有用子例程的 fortran 文件,我想使用 f2py 为其创建一个 Python 接口。

出现问题的原因是某些 fortran 子例程从 NAG 库(名为 c06ebf)调用 FFT 子例程。当导入 Python 时,它会产生“未定义符号:co6eb​​f”警告。

有没有其他方法可以在我的 Fortran 子例程中执行 FFT 并能够使用 f2py 从它创建 Python 接口?

0 投票
2 回答
1419 浏览

python - 带有包含文件的 f2py

我正在编译一个名为 prog.f 的 fortran 程序。它包含一个名为 test.inc 的包含文件。下面成功运行并显示我的包含文件已找到。我生成了一个 prog.so 文件。

但是,当我从 python 调用此模块时,我收到此错误消息:

我怀疑与我的编译参数有关,但我对 Fortran 不太熟悉。我还需要包含我的包含文件吗?如果有怎么办?