Python 访问c/c++;来自cython的swig包裹对象的级别

Python 访问c/c++;来自cython的swig包裹对象的级别,python,c++,numpy,swig,cython,Python,C++,Numpy,Swig,Cython,好的,首先,我知道一般来说这不是你应该尝试做的事情,但是,我有一个大型的C/C++库,带有swig包装器(第三方),我用它来按时间步解决问题,我需要在每一步转储数据,但是库中现有的数据转储函数基本上是一堆废话,甚至不可读。但是,我可以通过查找函数访问所需的数据,但是我查看的是数据字段。该函数为C/C++级别,在点和参数处接受,并返回该位置的字段 我可以在类上使用swig包装器从python调用它,但是对于每个时间步的一个简单测试问题,我需要调用它768000次,这意味着rahter在1.5s内完

好的,首先,我知道一般来说这不是你应该尝试做的事情,但是,我有一个大型的C/C++库,带有swig包装器(第三方),我用它来按时间步解决问题,我需要在每一步转储数据,但是库中现有的数据转储函数基本上是一堆废话,甚至不可读。但是,我可以通过查找函数访问所需的数据,但是我查看的是数据字段。该函数为C/C++级别,在点和参数处接受,并返回该位置的字段

我可以在类上使用swig包装器从python调用它,但是对于每个时间步的一个简单测试问题,我需要调用它768000次,这意味着rahter在1.5s内完成360个步骤,每个时间步需要120-180秒

另一方面,调用只是在一个numpy/h5py数组中设置数组元素,我想重写它以使用cython(我知道怎么做,因为我自己从cython包装了整个库,并且访问了C级对象),所以我需要从cython访问这个C函数和对象的C重新启动(我的问题)。()

但是我不太熟悉swig,因为我不使用它,我使用C-API或cython来连接代码,我在互联网上也找不到任何明显的信息,所以花几个月的时间来切换swig,我自己解决不了这个问题,我查看了swig生成的文件,它们充满了垃圾,这使得它们无法跟踪

假设我有python包装器对象X和python包装器方法y(*args),该方法包装c对象cX和方法调用cX.y,我如何从X获取对cX的引用,以便我可以使用以下行中的某些内容来检查字段:

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)是什么?

的可能重复项请参见