2012-06-06 27 views
5

Thực hiện các phiên bản gần đây của các chức năng fortran có gói mảng có hỗ trợ f2py? Trong một số tài liệu cổ, điều này không được hỗ trợ. Làm thế nào về nó bây giờ?Các chức năng có giá trị mảng f2py

Ví dụ: lưu hàm sau dưới dạng 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 

tôi biên dịch này với f2py --fcompiler=gnu95 -c -m func func.f95

Sau đó để mã python sau được 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 

Kết quả từ
python test_func.py được

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

bạn có thể làm [giải pháp thay thế được giải thích trong câu trả lời này ...] (http://stackoverflow.com/q/17474225/832621), nhưng sẽ yêu cầu đánh giá nhiều hơn yêu cầu. Đối với trường hợp này, tôi muốn tìm 'Cython' –

Trả lời

2

Các tôi chanism của f2py biến Fortran chương trình con thành các hàm python. Nó không hiểu làm thế nào để biến một hàm Fortran thành một hàm python. Tôi đã tìm thấy rằng tôi cần phải bọc tất cả các chức năng của Fortran với một chương trình con, hoặc thậm chí tốt hơn, viết lại chúng như là các chương trình con.

+0

Có phải f2py ** mà ** mạnh không? Có đủ đáng tin cậy khi viết toàn bộ mã nguồn của fortran theo cách đặc biệt này là một mức giá hợp lý không? – Tentresh

+0

Tôi chưa bao giờ gặp vấn đề về độ tin cậy, nhưng như tôi đã nói, điều đó thật khó chịu. Cá nhân, tôi chỉ sử dụng nó cho các dự án nhỏ vì những hạn chế mà nó áp đặt. Có một công cụ khác, [fwrap] (http://fwrap.sourceforge.net/), đó là nghĩa vụ phải tốt hơn f2py, nhưng tôi chưa thử nghiệm nó. – SethMMorton

Các vấn đề liên quan