我正在使用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
我可以看到数组中的值。
我在这里明显遗漏了一些关键部分!
答案 0 :(得分:0)
假设形状数组要求调用者传递有关数组边界的信息以及数据地址。执行此操作的机制取决于实现,并非所有实现都记录其方法。您的Python代码只是传递数据地址,但Fortran期望(通常)一个“描述符”数据结构。 (Fortran 2015指定了一种标准方法,作为“进一步C互操作性”的一部分。)
我建议改为Fortran称之为“可调整数组”,将范围作为单独的参数传递。