我正在尝试使用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
答案 0 :(得分:4)
要解决此问题,您需要
在@mgilson提到的.c
函数中使用返回变量的指针,
void Test(double *x, double y)
{
*x = y * 2;
}
在.pyf
接口中指定使用指针,这是偶然相同的大小为1的数组,
double precision intent(out) :: x(1)
double precision intent(in) :: y
test.Test
函数将返回不是标量,而是返回长度为1的numpy ndarray,包含该标量。不过,我不确定是否还有其他方法可以处理它。
答案 1 :(得分:2)
我不是C
的专家,但我认为你的变量需要指向任何可以改变的东西:
void Test(double *x, double *y)
{
*x = *y * 2;
}
答案 2 :(得分:0)
编辑:我的第一个答案是错误的,正如其他人所指出的那样,值确实应该作为指针传递给C.
void Test(double* x, double* y)
{
*y = *x * 2;
}