【问题标题】:Convert string to ndarray in python在python中将字符串转换为ndarray
【发布时间】:2014-11-28 01:08:26
【问题描述】:

我正在通过 Python 的套接字从 A-D 转换器读取数据流;数据以原始字节的形式出现。我想将这些字节格式化为 int32 并将它们放入 ndarray。读取过程如下所示:

def datarecv():
    global msgbuf
    binlen = BURSTLEN + 4
    while len(msgbuf) < binlen:
        msgbuf = msgbuf + socket.recv(4096)
    reply = msgbuf[0:binlen]
    msgbuf = msgbuf[binlen:]
    # each recv comes with a 4 byte header that I throw away...
    return reply[4:]

以下用于成功将接收到的数据写入文件:

with open(filename, "wb') as f:
    bytesremaining = framesize
    for i in range(lines):
        f.write(datarecv()[0:min(linesize, bytesremaining)])
        bytesremaining -= linesize

然后我可以用这样的方式读回文件:

>>> data = numpy.fromfile(filename, dtype='int32')
>>> type(data)
<type 'numpy.ndarray'>

所以我的数据变量是我正在寻找的格式,即 I.E.

>>> data[1:10]
array([4214234234, 2342342342, 2342342342, 34534535, 345345353, 5675757, 
      2142423424, 35334535, 35353535, 4754745754], dtype=int32)

** 但是 ** 我想省略写入文件的中间步骤。在我读入原始数据流之后,我想把它变成一个 ndarray 以便我可以操作数据。我可以换行

        f.write(datarecv()[0:min(linesize, bytesremaining)])

        bigbuf = bigbuf + datarecv()[0:min(linesize, bytesremaining)]

然后我得到一个大字符串。它是一串原始字节(不是 ASCII),我必须将其转换为 32 位整数。我被这最后一步挂断了。我希望这是有道理的,我在问什么。谢谢。

【问题讨论】:

    标签: python list numpy multidimensional-array


    【解决方案1】:

    您可以使用numpy.fromstringbigbuf 转换为数组

    例如:

    In [21]: bigbuf = "\1\0\0\0\2\0\0\0"
    
    In [22]: fromstring(bigbuf, dtype=np.int32)
    Out[22]: array([1, 2], dtype=int32)
    

    【讨论】:

    • 完美,正是我所需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2021-05-14
    相关资源
    最近更新 更多