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
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.