Python 将numpy数组传递给c++;函数并返回numpy数组作为输出?
我已经创建了一个共享库。我就是这么用的Python 将numpy数组传递给c++;函数并返回numpy数组作为输出?,python,c++,arrays,numpy,Python,C++,Arrays,Numpy,我已经创建了一个共享库。我就是这么用的 class CAudioRecoveryStrategy(AbstractAudioRecoveryStrategy): def __init__(self): array_1d_double = npct.ndpointer(dtype=numpy.double, ndim=1, flags='CONTIGUOUS') self.lib = npct.load_library("libhello", ".")
class CAudioRecoveryStrategy(AbstractAudioRecoveryStrategy):
def __init__(self):
array_1d_double = npct.ndpointer(dtype=numpy.double, ndim=1, flags='CONTIGUOUS')
self.lib = npct.load_library("libhello", ".")
self.lib.demodulate.argtypes = [array_1d_double, array_1d_double, ctypes.c_int]
def demodulate(self, input):
output = numpy.empty_like(input)
self.lib.demodulate(input, output, input.size)
return output
<>现在我有个问题,在C++代码中,我只有指向输出数据数组的指针,而不是数组。所以我不能返回数组,除非我手动复制它
正确的方法是什么?它必须是高效的(如对齐内存等)。Numpy阵列实现缓冲协议,请参阅 . 特别地, 将输入对象解析为PyObject*(转换
O
,如果需要
使用PyArg\u ParseTuple
或PyArg\u ParseTupleAndKeywords
),然后
执行PyObject\u CheckBuffer
,以确保类型支持
协议(numpy数组),然后填写PyObject\u GetBuffer
带有物理地址、维度的Py_缓冲区struct,
底层内存块的等。返回numpy缓冲区的步骤
比较复杂,;总的来说,我觉得这足以
创建我自己类型的对象,它也支持缓冲区
协议(将PyTypeObject
中的tp\u as\u buffer
设置为非空)。
否则(但我还没有真正尝试过),你必须这样做
导入numpy模块,获取其数组
属性,用
输入正确的参数,然后在上使用上面的缓冲区协议
这样构造的对象。我不是在编写python扩展。我正在使用一个共享库。所以那里没有PyObjects。