Numpy: ndarray 不接受 python2 下 buffer= 的 memoryview

创建于 2015-06-02  ·  4评论  ·  资料来源: numpy/numpy

楼上你好。

我发现ndarray(buffer=memoryview)在 python 2 上失败:

In [1]: sys.version
Out[1]: '2.7.10 (default, May 26 2015, 13:16:40) \n[GCC 4.9.2]'

In [2]: numpy.__version__
Out[2]: '1.10.0.dev0+9e7a0b2'


In [3]: b = bytearray([1,2,3])

In [4]: b
Out[4]: bytearray(b'\x01\x02\x03')

In [5]: m = memoryview(b)

In [6]: m
Out[6]: <memory at 0x7fa1f4e59b50>

创建由 memoryview 支持的 ndarray 失败:

In [7]: a = ndarray((3,), buffer=m, dtype=uint8)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-32-1528204f5358> in <module>()
----> 1 a = ndarray((3,), buffer=m, dtype=uint8)

TypeError: expected a readable buffer object

虽然如果我们将 memoryview 传递给 array() 会成功:

In [8]: a = array(m, copy=False)

In [9]: a
Out[9]: array([1, 2, 3], dtype=uint8)

In [10]: a[0] = 5

In [11]: a
Out[11]: array([5, 2, 3], dtype=uint8)

In [12]: b
Out[12]: bytearray(b'\x05\x02\x03')

[7] 当然适用于 python 3。

预先感谢,
基里尔

01 - Enhancement

所有4条评论

IIRC,我们决定在 Python 2 中不支持 memoryview,因为它仅适用于 2.7。 但是,它已被向后移植到 2.6,并且我们不再支持早期版本,因此我们可能应该重新考虑该决定。

是的。 请注意,Python 2 已经支持它——array() 接受 memoryview(上面的 [8-12])。 只有 ndarray 构造函数不接受 buffer= 参数的 memoryview。

我们也希望对 memoryview 有更好的支持

关闭这个,仅 Python 2.x 的问题不再相关,因为我们很快就会放弃对 2.7 的支持。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

perezpaya picture perezpaya  ·  4评论

dmvianna picture dmvianna  ·  4评论

astrofrog picture astrofrog  ·  4评论

Foadsf picture Foadsf  ·  3评论

toddrjen picture toddrjen  ·  4评论