2017-03-07 2 views
0

Sagen, ich habe ein Modul über f2py erstellt werden:f2py nicht kompiliert mit negativen Indizes für Vektorparameter

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 

Beim Laufen f2py -c -m test test.f90, erhalte ich die Fehler

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

Auf der anderen Seite, wenn icherkläremit dimension(2*q+1), es funktioniert. Irgendwie. Wenn ich in Python importiere:

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

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

Was ist hier los ??

Antwort

0

Sie können eine Signaturdatei erstellen, um die Array-Dimensionen richtig einzustellen. Dies schafft die Signaturdatei 'sign.pyf' für das Python-Modul 'mymod':

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

Dann verwenden Sie diese zu kompilieren:

f2py -c sign.pyf test.f90 

Die Bibliothek importiert und in Python verwendet werden können, wie:

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

Hinweis, dass die Arraygrenzen verschoben sind und das erste Element hat den Index 0 in Python:

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