Halo di atas sana.
Saya telah menemukan bahwa ndarray(buffer=memoryview)
gagal pada 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>
Membuat ndarray yang didukung oleh memoryview gagal:
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
meskipun berhasil jika kita meneruskan memoryview ke 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] bekerja pada python 3, tentu saja.
Terimakasih sebelumnya,
Kirill
IIRC, kami memutuskan untuk tidak mendukung memoryview di Python 2 karena hanya tersedia untuk 2.7. Namun, itu telah di-backport ke 2.6 dan kami tidak lagi mendukung versi sebelumnya, jadi kami mungkin harus meninjau kembali keputusan itu.
Ya. Harap dicatat itu sudah didukung pada Python 2 - array() menerima memoryview ([8-12] di atas). Hanya konstruktor ndarray yang tidak menerima memoryview untuk argumen buffer=.
Kami ingin memiliki dukungan yang lebih baik untuk memoryview juga
Menutup ini, masalah Python 2.x saja tidak lagi relevan mengingat kami akan segera menghentikan dukungan untuk 2.7.