我想使用f2py
生成一个行为类似python类的对象:它应该存储一段数据,这样数据只需要传递一次。我最终希望得到下面这样的python代码,其中myfortranmodule
是用f2py
编译的模块。在
from myfortranmodule import Analyzer
analyzer = Analyzer(bigvector)
for parameter in [0.0, 8.3, 10.2, ...]:
answer = analyzer.get_answer(parameter)
具体地说,我需要以这种方式构造它,因为bigvector
是一个非常大的数据块,应该只传递一次,for循环中的参数列表很长(不能提前传递,因为它是在python中动态生成的),而且get_answer
方法计算量很大,所以应该在fortran中完成。在
有没有可能用f2py
来构建类似类的对象,或者在fortran子例程中存储数据?在
我将对我的问题给出一个不完美的答案,因为我现在有了一个合理的解决方案。我找到的解决方法是在f2py中使用“公共块”,它允许从python直接访问fortran子例程中指定的变量。对于这个类来说,一次传递多个类的唯一值是不可能的
下面是一个简短的例子。下面是fortran代码的示例。在
这是用
^{pr2}$然后在python中,我可以直接访问和修改
common.data.saved
中的值,当我调用子例程common.add
时,它返回传递和存储值的总和。因此,“存储的”值只需要传递一次,就像原始帖子中所要求的那样。在这在f2py Users Guide and Reference Manual中有更详细的描述。在
这只是为了确认使用公共块可以满足您的需要。实际上,我从相反的角度偶然发现了这一点;当我想要一个干净的方法调用时,我正在获取数据持久性! 由于Fortran例程很长,所以我通过从那里启动一个
multiprocessing.process
调用Fortran模块,然后在每次我想运行它时join
来解决这个问题。这比重写Fortran删除公共块要简单得多。在相关问题 更多 >
编程相关推荐