C, cython和pandas dataframe交互int64, int32的選擇
cython調用C代碼的一個錯誤 expected 'int' but got 'long',原因不復雜,C code的int為32bit, 而pandas df缺省為np.int64 (64bit),有個參數傳遞了數組,指針類型就不符了。
兩個解決方案
- C代碼里面所有相關的int改為long long類型
或者 - 使用pandas dataframe前轉換為np.int32, 即df.astype(np.int32)
性能比較:
64位的機器上全部都跑64位的整數速度更快一點,但耗內存多一點。
操作主要是循環比較,全部用64bit整型耗時大概是第2種方法的85%左右,其中第2種方法包括了類型轉換的時間。
如果把int64轉為int32這一步排除,全部在64bit上計算仍然性能占優,大約是第二種方法的87%.
測試環境:i7-12700 CPU, Ubuntu 5.15.0-69-generic 20.04.1 LTS

浙公網安備 33010602011771號