Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将numpy数组传递给c++;函数并返回numpy数组作为输出?_Python_C++_Arrays_Numpy - Fatal编程技术网

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。