将数组传递给假定形状的函数

时间:2016-11-20 17:52:21

标签: python arrays fortran f2py

我正在使用Python调用由f2py绑定的Fortran函数。当我明确地对数组进行维度时,我的求和调用返回所需的结果,但是当我使用假定形状时,它返回0

! foo.f95
function sum_test(arr)
  IMPLICIT NONE
  integer(8), dimension(:), intent(in) :: arr
  integer(8) :: sum_test
  sum_test = sum(arr)
end function sum_test

Python方面:

import foo
foo.sum_test([1,2,3])
0L

如果我在Fortran中明确标注:

! foo.f95
function sum_test(arr)
  IMPLICIT NONE
  integer(8), dimension(3), intent(in) :: arr
  integer(8) :: sum_test
  sum_test = sum(arr)
end function sum_test

Python方面:

import foo
foo.sum_test([1,2,3])
6L

请注意,如果我在假设形状版本上打印我的值,如下所示:

write(*,*) arr

我可以看到数组中的值。

我在这里明显遗漏了一些关键部分!

1 个答案:

答案 0 :(得分:0)

假设形状数组要求调用者传递有关数组边界的信息以及数据地址。执行此操作的机制取决于实现,并非所有实现都记录其方法。您的Python代码只是传递数据地址,但Fortran期望(通常)一个“描述符”数据结构。 (Fortran 2015指定了一种标准方法,作为“进一步C互操作性”的一部分。)

我建议改为Fortran称之为“可调整数组”,将范围作为单独的参数传递。