gpt4 book ai didi

python - 将 numpy 数组传递给 c++ 函数并将 numpy 数组作为输出返回的最有效方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:30 34 4
gpt4 key购买 nike

我创建了一个共享库。我就是这样使用它的

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 数组实现缓冲协议(protocol),参见 https://docs.python.org/2/c-api/buffer.html .尤其,将输入对象解析为 PyObject*(转换 O 如果你是使用 PyArg_ParseTuplePyArg_ParseTupleAndKeywords),然后执行 PyObject_CheckBuffer,确保类型支持协议(protocol)(numpy数组做),然后 PyObject_GetBuffer 填写具有物理地址、维度、底层内存块等。返回一个 numpy 缓冲区更复杂;总的来说,我发现它足以创建我自己类型的对象,它也支持缓冲区协议(protocol)(在 PyTypeObject 中将 tp_as_buffer 设置为非 null)。否则(但我实际上并没有尝试过),你必须导入 numpy 模块,获取其 array 属性,调用它正确的参数,然后使用上面的缓冲协议(protocol)您由此构造的对象。

关于python - 将 numpy 数组传递给 c++ 函数并将 numpy 数组作为输出返回的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23653692/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com