如何在numpython3+;

如何在numpython3+;,python,python-3.x,numpy,numpy-ndarray,numpy-dtype,Python,Python 3.x,Numpy,Numpy Ndarray,Numpy Dtype,我有一个从串行端口获取的300x57字节的数组,并共享了它,然后我打算将它直接解压到numpy数组中 所以我制作了一个大小为57字节的数据类型 onebuffdtype = np.dtype( "b1, b1, f4, u4, u2, u1, f4, u4, u2, u1, f4, i4, i2, i1, f4, u4, u2, u1, f4, u4, u2, u1") 那么如果 shared_buff1.buf 是缓冲区所在的位置 buff1_np = np.ndarray

我有一个从串行端口获取的300x57字节的数组,并共享了它,然后我打算将它直接解压到numpy数组中

所以我制作了一个大小为57字节的数据类型

onebuffdtype = np.dtype(
        "b1, b1, f4, u4, u2, u1, f4, u4, u2, u1, f4, i4, i2, i1, f4, u4, u2, u1, f4, u4, u2, u1")
那么如果

shared_buff1.buf
是缓冲区所在的位置

buff1_np = np.ndarray((300, 57,), dtype=onebuffdtype,
                          buffer=shared_buff1.buf)
但是它说

TypeError:缓冲区对于请求的数组太小


数组的形状是元素的数量,而不是它包含的字节数。如果元素的大小都是57字节,那么300x57字节的缓冲区正好适合初始化大小为300的数组:

buff1_np = np.ndarray(300, dtype=onebuffdtype, buffer=shared_buff1.buf)

如果您的数据类型是57字节长,那么您的形状数组应该是
(300,)
请以后添加普通标记(这次我为您修复了它)。在本例中,python和numpy将是普通标记。在你的问题中没有任何特定于3.6版的内容,即使指出你正在使用的版本是有用的。@MadPhysicast是的,谢谢,你回答得对,我选择它是正确的,我是numpy的一个小傻瓜,很公平。希望这能在将来帮助其他人。享受这个过程。