我有以下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
如何解决?
答案 0 :(得分:2)
您的描述错误。
A
和B
是数组n x n
,它清楚地计算了它们的矩阵乘积。
> 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)