f2py不会使用vector参数的负索引进行编译

时间:2017-03-07 19:30:41

标签: 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},

另一方面,如果我使用vec声明dimension(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.]) # ???

这里发生了什么?

1 个答案:

答案 0 :(得分: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()

注意,数组边界被移位,第一个元素在Python中的索引为0:

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