Python 如何使用f2py(传递参数)?

Python 如何使用f2py(传递参数)?,python,fortran,f2py,Python,Fortran,F2py,我有以下fortran代码: SUBROUTINE MMUL(A,B,D,n) C INTEGER :: n REAL, DIMENSION (n, n) :: A, B, D C CF2PY INTENT(IN) :: A CF2PY INTENT(IN) :: B CF2PY INTENT(IN) :: n CF2PY INTENT(OUT) :: D D = MATMUL(A, B) END 它表示该代码接受两个1D数

我有以下fortran代码:

      SUBROUTINE MMUL(A,B,D,n)
C
      INTEGER :: n
      REAL, DIMENSION (n, n) :: A, B, D
C
CF2PY INTENT(IN) :: A
CF2PY INTENT(IN) :: B
CF2PY INTENT(IN) :: n
CF2PY INTENT(OUT) :: D   

      D = MATMUL(A, B)

      END
它表示该代码接受两个1D数组(即向量),并返回这些向量之间的点积。我需要将其包装到python脚本中。我这样使用smth:

f2py.compile(fsqrtmatmul.encode(), modulename='fsqrtmatmul', verbose=0)
import fsqrtmatmul
res = fsqrtmatmul.mmul([[1., 2.0]], [[2., 1.]])
但它不起作用:

fsqrtmatmul.error: failed in converting 2nd argument `b' of fsqrtmatmul.mmul to C/Fortran array

如何修复它?

您的描述是错误的

A
B
是数组
nxn
,它清楚地计算出它们的矩阵积

> f2py -c mmul.f -m mmul


> ipython


In [1]: import mmul

In [2]: D = mmul.mmul([[2.,0.],[0.,2.]],[[3.,0.],[0.,3.]],2)

In [3]: D
Out[3]: 
array([[ 6.,  0.],
       [ 0.,  6.]], dtype=float32)