将数组/向量发送到 c++ 脚本的 cython 示例



假设我们有一个一维 numpy 数组或列表,我们将其用作函数的输入,即 func(np.array[1.5, 2.5, 3.5](,其中该函数来自包装的 C++ 类,我们的目标是在 C++ 脚本中打印该数组或向量的值。

但是,我不知道如何为此定义c ++函数并在pyx文件中指定它。并想问您是否可以分享一个像具有上述功能一样简单的片段,其中低延迟是最重要的。

基本上,在 c++ 方面,我想做:

void func (/* where I don't what to write */) {
std::cout <<  array_[0] << std::endl; // which prints 1.5 (since np.array[1.5, 2.5, 3.5][0] was 1.5)
std::cout <<  array_[1] << std::endl; // which prints 2.5 (since np.array[1.5, 2.5, 3.5][1] was 2.5)
std::cout <<  array_[2] << std::endl; // which prints 3.5 (since np.array[1.5, 2.5, 3.5][2] was 3.5)
}

似乎memoryviews提供了一个可能的解决方案,它也具有低延迟,但是查看Cython关于memoryviews的文档,我很困惑。

这里的例子提到 (int* a, int n( 作为上述函数的参数,但我没有理解 a 和 n 是什么以及如何在 c++ 端索引数组。最后写pyx镜子我也不清楚。

如果有人能为这样的 c++ 函数提供一个非常简单的片段示例,我将不胜感激,它是 pyx 对应物。除了内存视图之外,任何不慢的建议也非常受欢迎:(

  • a是一个变量,其中包含指向零个或多个int的指针。
  • na包含的值的数量。

您可以使用标准C++数组访问语法a[i]索引a。确保i < n.

然后,C++标头将如下所示:

void func(int *a, int n);

.pyx 文件类似于

cdef extern from "myheader.hpp":
void func(int *a, int n)
def func_wrapper(int[::1] mview):
func(&mview[0], mview.shape[0])

您需要以通常的方式编译它,确保在源列表中同时列出您的 Cython 源文件和 C 源文件(.cpp文件,而不是标头(。

最新更新