2014-11-18 2 views
1

У меня есть следующий код: FORtranКак использовать f2py (передать аргументы)?

 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. Я использую это как-л:

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 

Как это исправить?

ответ

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) 
Смежные вопросы