如何将我的 (7, 3, 3, 3) 数组传递给 Fortran 子例程?
How do I pass my (7, 3, 3, 3) array to a fortran subroutine?
我已经通过 f2py 命令编写了一个用于 python 的 fortran 子例程。
子例程采用形状为 (7, 3, 3, 3) 的 numpy ndarray。该数组是 7 个立方体的数组,大小为 3x3x3。我还将整数 7 和 3 传递给子例程。
这是代码
subroutine fit(n, m, a)
c ===================================================================
c ArrayTest.f
c ===================================================================
c n - number of cubes being passed
c
c m - edge of cube size
c
c a(n,m,m,m) - array of shape (n,m,m,m)
c
c ===================================================================
implicit none
integer m
integer n
double precision a(n,m,m,m)
end subroutine fit
这只是为了看看我能不能传数组。当我从 python 编译和调用它时,出现以下错误。
import ArrayTest as AT
import numpy as np
n = 7
m = 3
a = np.ones((n,m,m,m))
AT.fit(n, m, a)
投掷
ArrayTest.error: (shape(a,0)==n) failed for 1st keyword n: fit:n=3
我不知道发生了什么。在 fortran 中将数组定义为 a(m,m,m,m) 不会引发任何问题,只有当我尝试从两个整数定义它时才会导致问题,即使我同时设置了 m = n = 3。如何将我的 (7, 3, 3, 3) 数组传递给 Fortran 子例程吗?
查看由 f2py 创建的 Python 函数的文档字符串:
fit(a,[n,m])
Wrapper for ``fit``.
Parameters
----------
a : input rank-4 array('d') with bounds (n,m,m,m)
Other Parameters
----------------
n : input int, optional
Default: shape(a,0)
m : input int, optional
Default: shape(a,1)
f2py 认识到 n
和 m
描述了 a
的形状,因此 Python 函数不需要参数,因为它们可以通过检查 numpy 数组的形状。所以它们是 Python 函数的可选第二个和第三个参数 fit
:
In [8]: import ArrayTest as AT
In [9]: n = 7
In [10]: m = 3
In [11]: a = np.zeros((n, m, m, m))
In [12]: AT.fit(a, n, m)
In [13]: AT.fit(a)
我已经通过 f2py 命令编写了一个用于 python 的 fortran 子例程。
子例程采用形状为 (7, 3, 3, 3) 的 numpy ndarray。该数组是 7 个立方体的数组,大小为 3x3x3。我还将整数 7 和 3 传递给子例程。
这是代码
subroutine fit(n, m, a)
c ===================================================================
c ArrayTest.f
c ===================================================================
c n - number of cubes being passed
c
c m - edge of cube size
c
c a(n,m,m,m) - array of shape (n,m,m,m)
c
c ===================================================================
implicit none
integer m
integer n
double precision a(n,m,m,m)
end subroutine fit
这只是为了看看我能不能传数组。当我从 python 编译和调用它时,出现以下错误。
import ArrayTest as AT
import numpy as np
n = 7
m = 3
a = np.ones((n,m,m,m))
AT.fit(n, m, a)
投掷
ArrayTest.error: (shape(a,0)==n) failed for 1st keyword n: fit:n=3
我不知道发生了什么。在 fortran 中将数组定义为 a(m,m,m,m) 不会引发任何问题,只有当我尝试从两个整数定义它时才会导致问题,即使我同时设置了 m = n = 3。如何将我的 (7, 3, 3, 3) 数组传递给 Fortran 子例程吗?
查看由 f2py 创建的 Python 函数的文档字符串:
fit(a,[n,m])
Wrapper for ``fit``.
Parameters
----------
a : input rank-4 array('d') with bounds (n,m,m,m)
Other Parameters
----------------
n : input int, optional
Default: shape(a,0)
m : input int, optional
Default: shape(a,1)
f2py 认识到 n
和 m
描述了 a
的形状,因此 Python 函数不需要参数,因为它们可以通过检查 numpy 数组的形状。所以它们是 Python 函数的可选第二个和第三个参数 fit
:
In [8]: import ArrayTest as AT
In [9]: n = 7
In [10]: m = 3
In [11]: a = np.zeros((n, m, m, m))
In [12]: AT.fit(a, n, m)
In [13]: AT.fit(a)