从字节构造结构化标量

时间:2018-10-30 05:57:09

标签: python numpy

我发现自己最近使用numpy dtype代替ctypes处理二进制数据,例如:

dt = np.dtype([
    ('header', np.uint16),
    ('points', ([
        ('x', np.int32),
        ('y', np.int32),
    ], (16,))),
])
buffer = file_like.read(dt.itemsize)  # type: bytes

出于测试目的,您可以假设

buffer = bytes(range(dt.itemsize))

我一直在努力寻找与ctypes.from_buffer类似的东西。我可以提出的一些选择是:

  1. data = np.array(buffer).view(dt)[()]
  2. data = np.ndarray(shape=(), buffer=buffer, dt=dt)[()]
  3. data = np.frombuffer(buffer, dtype=dt).squeeze(axis=-1)[()]

这些似乎都令人费解-我想念更好的方法了吗?

1 个答案:

答案 0 :(得分:0)

data = np.void(buffer).view(dt)具有所需的属性:

  • 返回标量
  • 如果ValueError: new type not compatible with array.会抛出len(buffer) != dtype.itemsize