2017-10-12 13 views
0

を渡すために、GSLとのctypesを使用して、のシグネチャは次のとおりです。GSLのドキュメントによると、配列

double gsl_stats_correlation (const double data1[], 
           const size_t stride1, 
           const double data2[], 
           const size_t stride2, 
           const size_t n) 

私はPyPyからそれを呼び出すようにしてみてください。私のマシン上で

from ctypes import CDLL, RTLD_GLOBAL 
gslcblas = CDLL('libgslcblas.0.dylib',mode=RTLD_GLOBAL) 
libgsl = CDLL('/usr/local/lib/libgsl.0.dylib') 
from ctypes import c_double, c_size_t, pointer 
a1 = (c_double * 5)(1, 2, 3, 4, 5) 
a2 = (c_double * 5)(1, 2, 3, 6, 5) 
print(libgsl.gsl_stats_correlation(a1, c_size_t(1), 
     a2, c_size_t(1), c_size_t(5))) 

結果それが実行するための実行から変わるものの、現時点では1086463496です。それは明らかに正しいものではありません。私は間違って何をしていますか?関数呼び出しを次のように変更すると、

libgsl.gsl_stats_correlation(pointer(a1), c_size_t(1), 
          pointer(a2), c_size_t(1), c_size_t(5))) 

という結果になります。あなたはこのように機能のrestypeを設定する必要が

答えて

0

libgsl.gsl_stats_correlation.restype = c_double 

が正しく引数と応答タイプの指定について読むことthisのctypesチュートリアル(特にthis section)を見てください。

関連する問題