Numpy: ndarray no acepta memoryview para buffer= bajo python2

Creado en 2 jun. 2015  ·  4Comentarios  ·  Fuente: numpy/numpy

Hola allá arriba.

Descubrí que ndarray(buffer=memoryview) falla en 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>

La creación de ndarray respaldada por memoryview falla:

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

aunque tiene éxito si pasamos memoryview a 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] funciona en python 3, por supuesto.

Gracias de antemano,
cirilo

01 - Enhancement

Todos 4 comentarios

IIRC, decidimos no admitir memoryview en Python 2 porque solo estaba disponible para 2.7. Sin embargo, se ha retroalimentado a 2.6 y ya no admitimos versiones anteriores, por lo que probablemente deberíamos revisar esa decisión.

Si. Tenga en cuenta que ya es compatible con Python 2: array() acepta la vista de memoria ([8-12] arriba). Solo el constructor ndarray no acepta la vista de memoria para el argumento buffer=.

Nos encantaría tener un mejor soporte para memoryview también

Cerrando esto, los problemas exclusivos de Python 2.x ya no son relevantes dado que pronto dejaremos de admitir 2.7.

¿Fue útil esta página
0 / 5 - 0 calificaciones