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 に答える