2012-06-06 61 views
5

f2py支持的最新版本是否支持包裝數組值的fortran函數? 在一些古老的文檔中,這不被支持。現在呢?f2py數組值函數

舉個例子,將下面的函數保存爲func.f95。

function func(x) 
    implicit none 
    double precision :: x(:),func(size(x)) 
    integer :: i 
    do i=1,size(x) 
     func(i) = i*x(i) 
    end do 
end function 

f2py --fcompiler=gnu95 -c -m func func.f95

編譯這個然後讓下面的Python代碼是test_func.py

import func 
from numpy import array 

x = array(xrange(1,10),dtype='float64') 
print 'x=',x 

y = func.func(x) 
print 'func(x)=',y 


python test_func.py輸出

x= [ 1. 2. 3. 4. 5. 6. 7. 8. 9.] 
Segmentation fault 
+0

您可以[在此答案中解釋的解決方法...](http://stackoverflow.com/q/17474225/832621),但它將需要比所需的更多的評估。對於這種情況下,我會'Cython' –

回答

2

的我f2py的chanism將Fortran 子程序轉換爲python函數。它不知道如何將Fortran 函數轉換爲python函數。我發現我需要用子程序包裝所有Fortran函數,或者甚至更好,將它們重寫爲子程序。

+0

是f2py **那**功能強大?它是否足夠可靠,以這種特殊的方式編寫整個Fortran代碼庫價格合理? – Tentresh

+0

我從來沒有可靠性的問題,但就像我說的,這是令人沮喪的。就我個人而言,由於其所施加的限制,我只將它用於小型項目。還有另一個工具,[fwrap](http://fwrap.sourceforge.net/),它應該比f2py更好,但我沒有測試過它。 – SethMMorton