Numpy: ndarray не принимает memoryview для буфера = под python2

Созданный на 2 июн. 2015  ·  4Комментарии  ·  Источник: numpy/numpy

Привет там.

Я обнаружил, что 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>

Не удается создать ndarray с поддержкой memoryview:

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.

Заранее спасибо,
Кирилл

01 - Enhancement

Все 4 Комментарий

IIRC, мы решили не поддерживать memoryview в Python 2, потому что он был доступен только для версии 2.7. Однако он был перенесен на версию 2.6, и мы больше не поддерживаем более ранние версии, поэтому нам, вероятно, следует пересмотреть это решение.

да. Обратите внимание, что он уже поддерживается в Python 2 — array() принимает представление памяти ([8-12] выше). Только конструктор ndarray не принимает memoryview для аргумента buffer=.

Мы также хотели бы иметь лучшую поддержку для просмотра памяти.

В заключение отметим, что проблемы, связанные только с Python 2.x, больше не актуальны, учитывая, что мы скоро прекращаем поддержку версии 2.7.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги