gpt4 book ai didi

python - 将 numpy 数组转换为 cython 指针

转载 作者:太空狗 更新时间:2023-10-30 00:51:36 26 4
gpt4 key购买 nike

我有一个来自 cv2.imread 的 numpy 数组dtype = np.uint8也是如此和 ndim = 3 .

我想把它转换成 Cython unsigned int*与外部 cpp 库一起使用。

我正在尝试 cdef unsigned int* buff = <unsigned int*>im.data但是我收到错误 Python objects cannot be cast to pointers of primitive types

我做错了什么?

谢谢

最佳答案

更现代的方法是使用内存 View 而不是指针:

cdef np.uint32_t[:,:,::1] mv_buff = np.ascontiguousarray(im, dtype = np.uint32)

[:,;,::1]语法告诉 Cython 内存 View 是 3D 并且 C 在内存中是连续的。将类型定义为 memoryview 而不是 numpy 数组的优点是

  1. 它可以接受定义缓冲区接口(interface)的任何类型,例如内置数组模块,或来自 PIL 成像库的对象。
  2. Memoryviews可以在不持有GIL的情况下传递,这对并行代码很有用

要从 memoryview 获取指针,获取第一个元素的地址:

cdef np.uint32_t* im_buff = &mv_buff[0,0,0]

这比做 <np.uint32_t*>mv_buff.data 更好因为它避免了强制转换,而强制转换通常可以隐藏错误。

关于python - 将 numpy 数组转换为 cython 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10718699/

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