Numpy: ndarray akzeptiert keine Memoryview für buffer= unter python2

Erstellt am 2. Juni 2015  ·  4Kommentare  ·  Quelle: numpy/numpy

Hallo da oben.

Ich habe festgestellt, dass ndarray(buffer=memoryview) auf Python 2 fehlschlägt:

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>

Das Erstellen von ndarray unterstützt durch memoryview schlägt fehl:

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

obwohl es gelingt, wenn wir memoryview an array() übergeben:

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] funktioniert natürlich auf Python 3.

Danke im Voraus,
Kirill

01 - Enhancement

Alle 4 Kommentare

IIRC haben wir uns entschieden, Memoryview in Python 2 nicht zu unterstützen, da es nur für 2.7 verfügbar war. Es wurde jedoch auf 2.6 zurückportiert und wir unterstützen frühere Versionen nicht mehr, daher sollten wir diese Entscheidung wahrscheinlich noch einmal überdenken.

Jawohl. Bitte beachten Sie, dass es bereits von Python 2 unterstützt wird - array() akzeptiert Memoryview ([8-12] oben). Nur der ndarray-Konstruktor akzeptiert keine Speicheransicht für das Argument buffer=.

Wir würden gerne auch eine bessere Unterstützung für MemoryView haben

Abschließend sind nur Probleme mit Python 2.x nicht mehr relevant, da wir die Unterstützung für 2.7 bald einstellen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen