Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F2Py:使用通过Python调用的Fortran中的可分配数组_Python_Fortran_Dynamic Data_Runtime Error_F2py - Fatal编程技术网

F2Py:使用通过Python调用的Fortran中的可分配数组

F2Py:使用通过Python调用的Fortran中的可分配数组,python,fortran,dynamic-data,runtime-error,f2py,Python,Fortran,Dynamic Data,Runtime Error,F2py,使用F2Py编译适合在Python中使用的Fortran例程,在使用F2Py时成功编译了以下代码段,并将gfortran配置为编译器,但是,在Python中调用时,它会引发运行时错误! 有什么意见和解决方案吗 function select(x) result(y) implicit none integer,intent(in):: x(:) integer:: i,j,temp(size(x)) integer,allocatable:: y(:) j = 0

使用F2Py编译适合在Python中使用的Fortran例程,在使用F2Py时成功编译了以下代码段,并将gfortran配置为编译器,但是,在Python中调用时,它会引发运行时错误! 有什么意见和解决方案吗

function select(x) result(y)
   implicit none
   integer,intent(in):: x(:) 
   integer:: i,j,temp(size(x))
   integer,allocatable:: y(:)
   j = 0
   do i=1,size(x)
      if (x(i)/=0) then
         j = j+1
         temp(j) = x(i)
      endif
   enddo
   allocate(y(j))
   y = temp(:j)
end function select

类似的StackOverflow post也可以找到。

看看这篇文章,特别是它的示例和含义

!f2py depend(len_a) a, bar

但是,作者并未涉及生成不同大小数组的问题。

请看本文,特别是示例和

!f2py depend(len_a) a, bar

但是,作者并未涉及生成不同大小数组的问题。

您的函数应该声明为:

function select(n,x) result(y)
   implicit none
   integer,intent(in) :: n
   integer,intent(in) :: x(n) 
   integer :: y(n) ! in maximizing the size of y
   ...
实际上,Python是用C编写的,您的Fortran例程必须遵循Iso_C_绑定的规则。特别是,禁止使用假定形状阵列

在任何情况下,我更喜欢子程序:

  subroutine select(nx,y,ny,y)
     implicit none
     integer,intent(in) :: nx,x(nx)
     integer,intent(out) :: ny,y(nx)

ny是真正用于y的大小ny您的函数应该声明:

function select(n,x) result(y)
   implicit none
   integer,intent(in) :: n
   integer,intent(in) :: x(n) 
   integer :: y(n) ! in maximizing the size of y
   ...
实际上,Python是用C编写的,您的Fortran例程必须遵循Iso_C_绑定的规则。特别是,禁止使用假定形状阵列

在任何情况下,我更喜欢子程序:

  subroutine select(nx,y,ny,y)
     implicit none
     integer,intent(in) :: nx,x(nx)
     integer,intent(out) :: ny,y(nx)

ny是真正用于y ny的大小。您也可以发布python代码吗?f2py列表也是一个询问的好地方,响应通常非常快。@VladimirF我在python中调用它的代码是:导入测试;打印测试。选择[0,1,2,9,5],假设我已将其编译为test.pyd。@bdforbes谢谢您的提示。我提交并鼓励该列表在本页上查看,并给出一些解决方案想法。您也可以发布python代码吗?f2py列表也是一个询问的好地方,响应通常非常快。@VladimirF我在python中调用它的代码是:import test;打印测试。选择[0,1,2,9,5],假设我已将其编译为test.pyd。@bdforbes谢谢您的提示。我提交并鼓励在本页上查看列表,并给我一些解决方案的想法。感谢链接。但是问题是我们不知道输出数组的大小!谢谢你的链接。但是问题是我们不知道输出数组的大小!不,f2py手柄假定形状数组正好。好的。很高兴学习。但我不明白它是如何以便携的方式做到这一点的……不,f2py处理假定形状的数组正好。好的。很高兴学习。但我不明白它怎么能以便携的方式做到这一点。。。