2017-03-07 64 views
0

說我有一個模塊通過f2py編譯負指數編譯:f2py不會與向量參數

test.f90

module test 
implicit none 

integer, parameter :: q = 2 
real(8), parameter, dimension(-q:q) :: vec = (/ 1, 2, 3, 4, 5 /) 

contains 

subroutine writevec() 
    write(*,*) vec 
end subroutine 

end module 

在運行f2py -c -m test test.f90,我得到的錯誤

/tmp/tmp6X6gsD/src.linux-x86_64-2.7/testmodule.c:176:17: error: expected expression before ‘)’ token 
{"vec",1,{{-(-)+1}},NPY_DOUBLE}, 

另一方面,如果我聲明vecdimension(2*q+1),它的工作原理。有點。當我導入python時:

>>> from test import test 
>>> test.writevec() 
>>> 1.0000000000000000  2.0000000000000000  3.0000000000000000  4.0000000000000000  5.0000000000000000  

>>> test.vec 
>>> array([ 1., 2.]) # ??? 

這是怎麼回事?

回答

0

您可以創建一個簽名文件以獲得正確的數組尺寸。這對於Python模塊「mymod」創建簽名文件「sign.pyf」:

f2py -m mymod -h sign.pyf test.f90 

然後,用這個來編譯:

f2py -c sign.pyf test.f90 

圖書館可以導入Python中使用:

>>>import mymod 
>>>mymod.test.writevec() 

注意的是,數組邊界被移位並且第一元件具有索引0在Python:

>>>import mymod 
>>>mymod.test.veC#output: array([ 1., 2., 3., 4., 5.]) 
>>>mymod.test.vec[0] #output: 1.0