Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy函数的Fortran等价物_Numpy_Fortran_Fortran90 - Fatal编程技术网

Numpy函数的Fortran等价物

Numpy函数的Fortran等价物,numpy,fortran,fortran90,Numpy,Fortran,Fortran90,由于速度限制,我正在尝试将一些东西从Python翻译成Fortran。(这样我就可以在上面使用f2py了。) 问题是代码中包含许多Fortran 90中不存在的NumPy函数。所以我的问题是:是否有一个Fortran库至少实现了Fortran中的一些NumPy功能 我必须在代码中使用的函数通常很简单,因此我可以手动翻译它们。然而,我不想在这里重新发明轮子,特别是因为我在Fortran方面没有那么多经验,我可能不知道一些重要的注意事项 不管怎样,这里是我需要的一些函数的列表 np.mean (wi

由于速度限制,我正在尝试将一些东西从Python翻译成Fortran。(这样我就可以在上面使用f2py了。)

问题是代码中包含许多Fortran 90中不存在的NumPy函数。所以我的问题是:是否有一个Fortran库至少实现了Fortran中的一些NumPy功能

我必须在代码中使用的函数通常很简单,因此我可以手动翻译它们。然而,我不想在这里重新发明轮子,特别是因为我在Fortran方面没有那么多经验,我可能不知道一些重要的注意事项

不管怎样,这里是我需要的一些函数的列表

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
    参数
  • 我不知道有哪种Fortran与NumPy相当。Fortran基于标准的数组功能使得“基本”库尚未出现。不过,有几项举措:

  • “用Fortran语言收集个人科学惯例”
  • “Fortran Wiki是讨论Fortran编程语言和科学计算各个方面的开放场所。”
  • “FLIBS-Fortran模块的集合”
  • 现代Fortran通用资源。包含“Python Fortran Rosetta Stone”

  • 您是否将这些函数应用于整个
    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接口: