好的,首先我知道通常这不是你应该尝试做的事情,但我有一个带有swig包装器(第三方)的大型C / C ++库,我用它来通过时间步进来解决问题,我需要每一步都转储数据,但是libaries现有的数据转储功能基本上是一堆垃圾,甚至不可读。但是我可以通过查找函数访问我需要的数据,但是我正在查看函数是C / C ++级别的数据字段,并在点和参数处接受,并返回该位置的字段。
我可以使用类上的swig包装器从python中调用它,但是我需要将它调用768 000次以获得每个时间步的简单测试问题,这意味着在1.5秒内调整360步,每一步都是服用120-180s。
另一方面,调用只是在numpy / h5py数组中设置数组元素我想重写它以使用cython,(我知道如何做到这一点,因为我自己从cython中包装整个libary并且可以访问C级对象)所以我需要从cython访问这个C函数和C对象的重新解析(我的问题)。 (http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html)
但是我并不喜欢swig,因为我不使用它我使用C-API或cython来连接代码,我也无法在互联网上找到任何明显的信息,所以没有花费一对夫妇切割swig的几个月我自己无法解决这个问题,我看过swig生成的文件,它们充斥着垃圾,这使得它们无法跟上。
假设我有python包装器对象X和python包装器方法y(* args)包装c对象cX和方法调用cX.y,我怎么能从X得到一个参考cX所以我可以使用somthing allong the lines以下内容检查字段:
cdef extern from "X.h" namespace "N":
cdef cppclass cX:
R y(T1 arg1, T2 arg2)
cpdef get_fields(X /*swig wrapper class */, ndarray points):
buffer /* python buffer object */
for j in range(J):
for i in range(I):
for k in range(K):
p = points[j,i,k]
buffer[j,i,k] = get_cX(X).y(arg1, T2(p[0],p[1],[3]))
return buffer
函数get_cX(X)是什么?