Numpy: ndarrayは、python2でbuffer=のmemoryviewを受け入れません

作成日 2015年06月02日  ·  4コメント  ·  ソース: numpy/numpy

こんにちは。

私はndarray(buffer=memoryview)がPython2で失敗することを発見しました。

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>

memoryviewに裏打ちされたndarrayの作成は失敗します:

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

ただし、me​​moryviewを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]はもちろんPython3で動作します。

よろしくお願いします、
キリル

01 - Enhancement

全てのコメント4件

IIRCでは、Python 2でmemoryviewをサポートしないことにしました。これは、2.7でしか使用できなかったためです。 ただし、2.6にバックポートされており、以前のバージョンはサポートされていないため、おそらくその決定を再検討する必要があります。

はい。 Python 2ですでにサポートされていることに注意してください-array()はmemoryview(上記の[8-12])を受け入れます。 ndarrayコンストラクターのみがbuffer=引数のmemoryviewを受け入れません。

memoryviewのサポートも強化したいと思います

これを閉じると、2.7のサポートが間もなく終了するため、Python2.xのみの問題は関係ありなくなります。

このページは役に立ちましたか?
0 / 5 - 0 評価