假设我们有一个一维 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
的指针。n
是a
包含的值的数量。
您可以使用标准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文件,而不是标头(。