Numpy函数的Fortran等价物
由于速度限制,我正在尝试将一些东西从Python翻译成Fortran。(这样我就可以在上面使用f2py了。) 问题是代码中包含许多Fortran 90中不存在的NumPy函数。所以我的问题是:是否有一个Fortran库至少实现了Fortran中的一些NumPy功能 我必须在代码中使用的函数通常很简单,因此我可以手动翻译它们。然而,我不想在这里重新发明轮子,特别是因为我在Fortran方面没有那么多经验,我可能不知道一些重要的注意事项 不管怎样,这里是我需要的一些函数的列表Numpy函数的Fortran等价物,numpy,fortran,fortran90,Numpy,Fortran,Fortran90,由于速度限制,我正在尝试将一些东西从Python翻译成Fortran。(这样我就可以在上面使用f2py了。) 问题是代码中包含许多Fortran 90中不存在的NumPy函数。所以我的问题是:是否有一个Fortran库至少实现了Fortran中的一些NumPy功能 我必须在代码中使用的函数通常很简单,因此我可以手动翻译它们。然而,我不想在这里重新发明轮子,特别是因为我在Fortran方面没有那么多经验,我可能不知道一些重要的注意事项 不管怎样,这里是我需要的一些函数的列表 np.mean (wi
np.mean (with the axis parameter)
np.std (with the axis parameter)
np.roll (again with the axis parameter)
np.mgrid
np.max (again with axis parameter)
在这一点上,任何东西都是有帮助的。我并不指望能找到所有的替代品,但如果其中至少有一些已经存在,那就太好了。我发现gfortran的内在程序列表在这里作为第一个参考非常有用
np.平均值
(带轴参数)见sum。它有一个轴参数。结合大小,它可以输出平均值:
result = sum(data, dim=axis)/size(data, dim=axis)
在这里,结果比数据少一个维度np.std
(带轴参数)np.滚动
(再次使用轴参数)np.mgrid
np.max
(再次使用轴参数)请参见maxval,它有一个
dim
参数您是否将这些函数应用于整个
numpy
数组?或者反复使用它们?如果您的numpy
代码已经很好地使用了这样的函数,那么转换为Fortran或C(通过Cython)可能不会获得那么多。@hpaulj我正在将它们用于整个numpy数组,但整个过程都在两个大循环中,我无法摆脱。所以我认为没有办法解决这个问题(除了可能使用Cython,但我现在没有时间学习Cython)。Python循环很慢,Fortran循环很快。特殊函数(如果存在的话)的使用时间会更短,但不会比优化良好(例如向量化)的循环更快。cshift()可能是np.roll的朋友。。。(可能spread()+implicated do loop是np.mgrid的朋友???)但我想为了提高速度,可能需要重新安排计算,并将一些计算合并到单个循环中(虽然根本不确定…),这不是一个内在循环,但如果您确实使用此处建议的sum+size组合实现了一个平均函数,您还可以使用一个线性定义std,例如数学恒等式Var[x]=e[x^2]-e[x]^2:std=sqrt(mean(data**2,dim=axis))-mean(data,dim=axis)**2)
GNU科学图书馆还有Fortran接口: