frombuffer
は、バイト列(またはより一般的にはbuffer protocolをサポートする任意のPythonオブジェクト)を配列として解釈すると思われます。デフォルトでは、dtype
はnp.float64
となっていますが、構造dtype
を含む特定のdtype
を指定することができます。 frombuffer
の
>>> import numpy as np
>>> A = np.frombuffer(b"Cool", dtype=[('x','<u2'),('y','<u2')])
>>> A
array([(28483, 27759)],
dtype=[('x', '<u2'), ('y', '<u2')])
一つの癖は、それはあなたではなく、それらをコピーするよりも、それを与えたバイトを直接参照配列を作成することです。
>>> A = np.fromstring(b"Cool", dtype=[('x','<u2'),('y','<u2')])
>>> A["x"] = 23
>>> A
array([(23, 27759)],
dtype=[('x', '<u2'), ('y', '<u2')])
:あなたが書き込み可能な何かをしたい場合は、
np.fromstring
代わりの
np.frombuffer
を使用
>>> A["x"] = 23
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: assignment destination is read-only
:それはあなたが(例えば)Pythonのバイト文字列でそれを使用した場合、結果の配列が読み取り専用であることを意味します
詳細については、this answerを参照してください。
あなたが(むしろ構造化DTYPEと普通のndarray
あるstructured array、より)本物のnumpyのrecord arrayをしたい場合、あなたはnd.rec.array
に結果を渡すことができます。
>>> np.rec.array(A)
rec.array([(28483, 27759)],
dtype=[('x', '<u2'), ('y', '<u2')])
録音・アレイは、非常に構造化された配列のようなものです独自のndarray
サブクラスを持ち、属性アクセスによるフィールドの取得を許可します。
>>> B = np.rec.array(A)
>>> B.x
array([28483], dtype=uint16)
ああ。答えのように聞こえます.... –