如何从字节串恢复二维numpy数组?

5 投票
3 回答
4228 浏览
提问于 2025-04-17 00:13

numpy.array 有一个很方便的 .tostring() 方法,可以把数组变成一个紧凑的字节串(bytestring)。但是,我该怎么从这个字节串恢复出原来的数组呢?numpy.fromstring() 只能生成一维数组,而且没有 numpy.array.fromstring() 这个方法。看起来我应该能提供一个字符串、一个形状和一个类型,然后就能恢复数组,但我找不到这样的函数。

3 个回答

0

对Mike Graham的回答做个更新:

  1. numpy.fromstring这个函数已经不推荐使用了,应该用numpy.frombuffer来替代。
  2. 如果处理的是complex(复数)类型的数据,dtype(数据类型)需要明确指定。

所以上面的例子可以改成:

>>> x = numpy.array([[1, 2j], [3j, 4]])
>>> x
array([[1.+0.j, 0.+2.j],
       [0.+3.j, 4.+0.j]])
>>> s = x.tostring()
>>> y = numpy.frombuffer(s, dtype=x.dtype).reshape(x.shape)
>>> y
array([[1.+0.j, 0.+2.j],
       [0.+3.j, 4.+0.j]])
0

这个东西好像不存在,不过你可以很简单地自己写出来:

def numpy_2darray_fromstring(s, nrows=1, dtype=float):
  chunk_size = len(s)/nrows
  return numpy.array([ numpy.fromstring(s[i*chunk_size:(i+1)*chunk_size], dtype=dtype)
                       for i in xrange(nrows) ])
11

在编程中,很多时候我们需要处理一些数据,比如从一个地方获取数据,然后对这些数据进行操作,最后再把结果放到另一个地方。这就像我们在厨房里做饭,先准备食材,然后烹饪,最后把菜端上桌。

有时候,我们会遇到一些问题,比如数据格式不对,或者数据缺失。这就像做菜时发现缺少某种调料,可能会影响最后的味道。因此,处理数据时,我们需要特别小心,确保每一步都能顺利进行。

在代码中,我们通常会使用一些工具和方法来帮助我们完成这些任务。这些工具就像厨房里的刀具和锅具,能让我们更高效地完成工作。

总之,编程就像做饭,需要耐心和细心,才能把每一道菜做得美味可口。

>>> x
array([[ 0.   ,  0.125,  0.25 ],
       [ 0.375,  0.5  ,  0.625],
       [ 0.75 ,  0.875,  1.   ]])
>>> s = x.tostring()
>>> numpy.fromstring(s)
array([ 0.   ,  0.125,  0.25 ,  0.375,  0.5  ,  0.625,  0.75 ,  0.875,  1.   ])
>>> y = numpy.fromstring(s).reshape((3, 3))
>>> y
array([[ 0.   ,  0.125,  0.25 ],
       [ 0.375,  0.5  ,  0.625],
       [ 0.75 ,  0.875,  1.   ]])

撰写回答