问题标签 [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.
performance - Fortran:32 位/64 位性能可移植性
我已经开始将 Fortran (95) 用于一些数字代码(生成 python 模块)。这是一个简单的例子:
我发现这在 32 位中表现得非常好,但是当编译为 x86_64 时,它慢了大约 5 倍(来自 r.research.att.com 的 macbook pro core2duo、snow leopard、gfortran 4.2.3)。我终于意识到这可能是由于使用 32 位整数类型而不是本机类型,实际上当我用整数 * 8 替换时,64 位性能仅比 32 位低 25%。
为什么在 64 位机器上使用 32 位整数要慢得多?索引是否有我可能不知道的隐式转换?
对于这种类型的代码,64 位是否总是比 32 位慢(对此我感到很惊讶)——或者我是否有机会让 64 位编译版本以相同或更快的速度运行?
(主要问题)有没有办法将(整数)变量声明为“本机”类型......即在现代 fortran 中编译为 32 位时为 32 位,在编译为 64 位时为 64 位。没有这个,似乎不可能编写出不会变慢的可移植fortran代码,具体取决于它的编译方式——我认为这意味着我将不得不停止在我的项目中使用fortran。我查看了 kind 和 selected_kind 但找不到任何这样做的东西。
[编辑:较大的性能损失来自 f2py 包装器复制数组以将其从 64 位 int 转换为 32 位 int,因此 fortran 没有任何固有的内容。]
f2py - F2PY:将单元素数组传递给 Fortran
以下 Fortran 代码用值 v 填充二维数组 x
从 Python 调用此函数时:
为什么这个断言失败了?
python - 如何使用 f2py 从 fortran 程序创建 python 模块?
我正在尝试使用 python 读取一些 smps 文件,并找到了一个 fortran 实现,所以我想我会给 f2py 一个机会。问题是我没有使用fortran的经验。
我已经在我的 Linux 机器上成功安装了 gfortran 和 f2py,并在 f2py 页面上运行了示例,但是我在编译和运行大程序时遇到了一些麻烦。有两个文件,一个带有文件阅读器包装器,一个带有所有逻辑。他们似乎互相调用,但是当我编译和链接或尝试 f2py 时,我得到了他们以某种方式找不到对方的错误:
我也尝试将名称更改为 FILE_WRAPPER.F 但这没有帮助。
使用 f2py 我发现我必须包含一条评论才能让它接受免费格式,并将其保存为一个新文件并尝试:
我得到了很多输出和警告,但错误似乎是这个:
任何帮助或建议表示赞赏。
python - 在 Ubuntu 10.04 LTS 上从 Fortran 源创建 Python C 模块
在我从事的一个项目中,我们使用从 Fortran 和f2py编译的 Python C 模块。我在 Windows 7 32 位(使用 mingw32)和基于 32 位 Linux 的服务器上构建它没有任何问题。但是我最近在我用于开发的笔记本电脑上安装了 Ubuntu 10.04 LTS 64bit,当我构建它时,我收到了很多警告(尽管我显然已经安装了所有 gcc/fortran 库/编译器),但它确实完成构建。但是,当我尝试在应用程序中使用内置模块时,它的大部分似乎运行良好,但随后它崩溃并出现错误:
* 检测到 glibc * /home/botondus/Envs/gasit/bin/python: free(): 下一个大小无效(快速):0x0000000006a44760 ***
运行f2py -c -m module_name ./fortran/source.f90 时的警告
我尝试通过安装 gfortran multilib 软件包并使用 -m32 选项运行 f2py 来构建 32 位版本(但没有成功):
f2py -c -m 模块名 ./fortran/source.f90 --f77flags="-m32" --f90flags="-m32"
关于我可以尝试构建 32 位版本或正确构建 64 位版本的任何建议?
编辑:看起来它在子程序结束时崩溃了。“写”执行得很好……这很奇怪。
完整的回溯很长,我不确定它是否有帮助,但这里是:
python - 使用 f2py 的问题
我有一些用 fortran 编写的例程,我想在我的 python 代码中使用它们。一个快速的网络搜索让我知道了 f2py,我试了一下。使用
它似乎工作了一段时间,直到在转换过程中产生了很多错误。知道为什么以下代码无法与 f2py 一起使用吗?
编辑:这是包含错误的日志文件。
python - NameError:名称'f2py'未定义
安装 python、numpy 和 scipy_dist_utils 后,我在 python 解释器上输入了 f2py 结果如下
from numpy import f2py 解决了这个问题,但这现在不起作用 f2py -c --help-fcompiler
f2py -c --help-fcompiler Traceback(最近一次调用最后一次):文件“”,第 1 行,在 f2py -c --help-fcompiler NameError: name 'c' is not defined
出了什么问题?有人可以帮我吗?
python - 将 python 回调函数传递给 Fortran 子程序的开销是多少?
我刚刚使用 F2PY 将 Fortran 90 子例程包装到 python 中。这里的微妙之处在于 Fortran 子例程也将 python 回调函数作为其参数之一:
这pyfunc
是我的python代码中其他地方定义的python函数。包装器工作正常,但是运行上面的包装版本,我得到的经过时间大约是使用纯 python 得到的时间的 5 倍,如下所示,
所以,问题是,开销是从哪里来的?我真的很想保持pyfunc
原样,因为将其重新编码为纯 fortran 函数非常耗时,那么有什么方法可以提高包装模块的速度吗?
numpy - 对 f2py 的更改进行编译时出现问题
我正在尝试更新我的包 scikits.bvp_solver (来源在这里),我遇到了 f2py 生成文件的一些问题。2009 年生成的文件“bvp_solverf-f2pywrappers2.f90”和“bvp_solverfmodule.c”允许使用“python setup.py build_ext --inplace”就地构建包,但如果我删除它们并尝试重建我得到错误
添加此使用语句的部分不会出现在旧版本的文件中。我很难弄清楚如何解决这个问题。任何人都可以提供建议吗?过去两年 f2py 的主要变化是什么?
python - f2py 错误:未定义的符号
我需要用 f2py 包装一个简单的 fortran90 代码。fortran 模块“test.f90”是
然后我用
但是当我在 python 中导入它时
它提示我说错误
关于如何解决它的任何想法?谢谢。
python - setup.py 用于依赖于 cython 和 f2py 的包
我想为一个 python 包创建一个 setup.py 脚本,其中包含几个依赖于 cython 和 f2py 的子模块。我曾尝试使用 setuptools 和 numpy.distutils,但到目前为止都失败了:
使用设置工具
我可以使用 setuptools 编译我的 cython 扩展(并为包的其余部分创建安装)。但是,我一直无法弄清楚如何使用 setuptools 来生成 f2py 扩展。经过大量搜索,我只发现了类似这样的相当老的消息,指出 f2py 模块必须使用 numpy.distutils 编译。
使用 numpy.distutils
我可以使用 numpy.distutils 编译我的 f2py 扩展(并为包的其余部分创建安装)。但是,我一直无法弄清楚如何让 numpy.distutils 编译我的 cython 扩展,因为它最近总是尝试使用 pyrex 来编译它(而且我正在使用特定于 cython 的扩展)。我已经进行了搜索以弄清楚如何为 cython 文件获取 numpy.distutils,并且 - 至少在一年前 - 他们建议将猴子补丁应用于 numpy.distutils。似乎应用这样的猴子补丁也限制了可以传递给 Cython 的选项。
我的问题是:为依赖于 f2py 和 cython 的包编写 setup.py 脚本的推荐方法是什么?对 numpy.distutils 应用补丁真的是要走的路吗?