【发布时间】:2014-08-17 06:41:29
【问题描述】:
我正在尝试为我的商业图像处理库的 python 绑定编写一个快速的非复制接口。我实现了根据 memoryview() 看起来不错的新型缓冲区 api 协议:
import hirsch as H
import numpy as np
w,h = 7,5
img = H.HImage.GenImageConst('byte',w,h)
m = memoryview(img)
print 'ndim shape=',m.ndim,m.shape
# -> 2 (5L, 7L)
我不明白的是为什么numpy没有捕捉到这个接口?
a = np.array(img)
print 'ndim size shape=',a.ndim,a.size,a.shape
# -> 0 1 ()
我是不是做错了什么,还是我应该求助于使用 numpy 数组接口,虽然它会复制数据,但它可以工作?
请注意,我使用的是 python 2.7
【问题讨论】:
-
可能发生了一些令人惊讶的事情 --- 但如果不知道您的
bf_getbuffer和bf_releasebuffer的实现是什么,就很难说出什么。新的缓冲区接口应该也适用于 Python 2.x(实际上是:np.array(memoryview('asd')) == np.array([ 97, 115, 100], dtype=np.uint8)。(另请注意,Numpy 数组接口不需要复制数据。)
标签: python python-2.7 numpy python-c-api pep3118