C, cython和pandas dataframe交互int64, int32的选择

发布时间 2023-04-07 20:31:59作者: daidau

cython调用C代码的一个错误 expected 'int' but got 'long',原因不复杂,C code的int为32bit, 而pandas df缺省为np.int64 (64bit),有个参数传递了数组,指针类型就不符了。

两个解决方案

  1. C代码里面所有相关的int改为long long类型
    或者
  2. 使用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