2017-10-12 4 views
0

을 전달,의 서명은 다음과 같습니다 내 컴퓨터에서사용하는 ctypes가 GSL 문서에 따르면 배열

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))) 

결과 :

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

것은 내가 함께 PyPy에서 호출 할 때 지금은 1086463496이지만 실행마다 변경됩니다. 분명히 정확한 것은 아닙니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 함수 호출을

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

으로 변경하면 똑같은 결과가 나타납니다.

답변

0

는이 같은 기능의 restype을 설정해야합니다

libgsl.gsl_stats_correlation.restype = c_double 

제대로 인수 및 응답 유형 지정에 대한 읽을 this하는 ctypes 튜토리얼 (특히 this section)에서보세요.