楼上你好。
我发现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。
预先感谢,
基里尔
IIRC,我们决定在 Python 2 中不支持 memoryview,因为它仅适用于 2.7。 但是,它已被向后移植到 2.6,并且我们不再支持早期版本,因此我们可能应该重新考虑该决定。
是的。 请注意,Python 2 已经支持它——array() 接受 memoryview(上面的 [8-12])。 只有 ndarray 构造函数不接受 buffer= 参数的 memoryview。
我们也希望对 memoryview 有更好的支持
关闭这个,仅 Python 2.x 的问题不再相关,因为我们很快就会放弃对 2.7 的支持。