2012-11-14 129 views
4

這可能有點愚蠢,但我試圖用ctypes調用一個接收復雜向量作爲參數的函數。但在ctypes中沒有c_complex類。 有人知道如何解決這個問題嗎?ctypes中的複數

編輯:我指的python的ctypes的,萬一有其他....

+1

'ctypes'是使用C接口,但你的'類c_complex'聽起來像C++ - 所以這是值得懷疑的還有內置的東西。 – martineau

回答

0

如果c_complex是一個C結構,你必須在文件的定義,或者你可以使用ctypes的一個頭文件組成一個兼容的類型。儘管不太可能,但也可能c_complex是ctypes已經支持的類型的typdef。

將需要

更多信息,提供一個更好的答案...

0

我想你指的是C99複雜類型,例如「_Complex double」。這些類型不是由ctypes本地支持的。例如參見討論there

+0

that must be it then guess我會在C中創建一個函數來將我的ctypes變成複合體並使它調用我想要的函數。非常感謝你! – xarles

0

使用c_double或c_float兩次,一次爲真,一次爲假。 例如:

from ctypes import c_double, c_int 
dimType = c_int * 1 
m = dimType(2) 
n = dimType(10) 
complexArrayType = (2 * c_double) * (n * m) 
complexArray = complexArrayType() 

status = yourLib.libcall(m,n,complexArray) 

在庫邊(FORTRAN爲例):

subroutine libcall(m,n,complexArrayF) bind(c, name='libcall') 
use iso_c_binding, only: c_double_complex,c_int 
implicit none 
integer(c_int) :: m, n 
complex(c_double_complex), dimension(m,n) :: complexArrayF 
integer :: ii, jj 

do ii = 1,m 
    do jj = 1,n 
     complexArrayF(ii,jj) = (1.0, 0.0) 
    enddo 
enddo 

end subroutine