2

我正在尝试使用 f2py 包装一个简单的 C 函数。它编译得很好,但函数只返回零。我是 C 的新手,所以我很确定在那里犯了一个愚蠢的错误。

例如 c 文件:

#include <stdio.h>
#include <stdlib.h>
void Test(double x, double y)
{
  x = y*2;
}

.pyf 文件:

python module test
interface
   subroutine Test(x, y)        
     intent (c) Test  ! is a C function
     intent (c)         ! all arguments are considered as C based
     double precision intent(in)     :: x
     double precision intent(out)    :: y
   end subroutine Test
end interface
end python module test
4

3 回答 3

4

要解决这个问题,你需要

  1. .c如@mgilson所述,要在函数中使用返回变量的指针,

    void Test(double *x, double y)
    {
       *x = y * 2;
    }
    
  2. .pyf接口中指定使用指针,它是大小为 1 的相同数组,

    double precision intent(out)   :: x(1)
    double precision intent(in)    :: y
    

然后该test.Test函数将返回不是一个标量,而是一个长度为 1 的 numpy ndarray,包含该标量。不过,我不确定是否有另一种处理方式。

于 2015-03-11T22:46:15.200 回答
2

我不是专家C,但我认为您的变量需要成为任何更改的指针:

void Test(double *x, double *y)
{
  *x = *y * 2;
}
于 2013-02-23T03:58:27.347 回答
0

编辑:我的第一个答案是错误的,正如其他人所指出的,这些值确实应该作为指针传递给 C。

void Test(double* x, double* y)
{
    *y = *x * 2;
}
于 2015-03-10T15:05:57.347 回答