您的位置:首页 > 编程语言 > Python开发

f2py::演示Fortran二维数组在python中的使用示例

2012-03-21 13:15 896 查看
f2py中二维数组的示例:

C FILE: ARRAY.F
SUBROUTINE FOO(A,N,M)
C
C     INCREMENT THE FIRST ROW AND DECREMENT THE FIRST COLUMN OF A
C
INTEGER N,M,I,J
REAL*8 A(N,M)
Cf2py intent(in,out,copy) a
Cf2py integer intent(hide),depend(a) :: n=shape(a,0), m=shape(a,1)
DO J=1,M
A(1,J) = A(1,J) + 1D0
ENDDO
DO I=1,N
A(I,1) = A(I,1) - 1D0
ENDDO
END
C END OF FILE ARRAY.F


在DOS窗口输入

f2py -c -m arr array.f


下面演示在python中如何使用:

>>> import arr
>>> from Numeric import array
>>> print arr.foo.__doc__
foo - Function signature:
a = foo(a,[overwrite_a])
Required arguments:
a : input rank-2 array('d') with bounds (n,m)
Optional arguments:
overwrite_a := 0 input int
Return objects:
a : rank-2 array('d') with bounds (n,m)

>>> a=arr.foo([[1,2,3],
...            [4,5,6]])
copied an array using PyArray_CopyFromObject: size=6, elsize=8
>>> print a
[[ 1.  3.  4.]
[ 3.  5.  6.]]
>>> a.iscontiguous(), arr.has_column_major_storage(a)
(0, 1)
>>> b=arr.foo(a)              # even if a is proper-contiguous
...                           # and has proper type, a copy is made
...                           # forced by intent(copy) attribute
...                           # to preserve its original contents
...
copied an array using copy_ND_array: size=6, elsize=8
>>> print a
[[ 1.  3.  4.]
[ 3.  5.  6.]]
>>> print b
[[ 1.  4.  5.]
[ 2.  5.  6.]]
>>> b=arr.foo(a,overwrite_a=1) # a is passed directly to Fortran
...                            # routine and its contents is discarded
...
>>> print a
[[ 1.  4.  5.]
[ 2.  5.  6.]]
>>> print b
[[ 1.  4.  5.]
[ 2.  5.  6.]]
>>> a is b                       # a and b are acctually the same objects
1
>>> print arr.foo([1,2,3])       # different rank arrays are allowed
copied an array using PyArray_CopyFromObject: size=3, elsize=8
[ 1.  1.  2.]
>>> print arr.foo([[[1],[2],[3]]])
copied an array using PyArray_CopyFromObject: size=3, elsize=8
[ [[ 1.]
[ 3.]
[ 4.]]]
>>>
>>> # Creating arrays with column major data storage order:
...
>>> s = arr.as_column_major_storage(array([[1,2,3],[4,5,6]]))
copied an array using copy_ND_array: size=6, elsize=4
>>> arr.has_column_major_storage(s)
1
>>> print s
[[1 2 3]
[4 5 6]]
>>> s2 = arr.as_column_major_storage(s)
>>> s2 is s    # an array with column major storage order
# is returned immediately
1


详细介绍可见下面的网站

http://cens.ioc.ee/projects/f2py2e/usersguide/index.html#string-arguments
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: