如何从bytestring恢复二维numpy.array?

时间:2011-08-23 17:52:05

标签: python numpy

numpy.array有一个方便的.tostring()方法,它将数组的紧凑表示形式作为字节串。但是如何从bytestring恢复原始数组? numpy.fromstring()只生成一维数组,没有numpy.array.fromstring()。似乎我应该能够提供字符串,形状和类型,然后去,但我找不到该功能。

3 个答案:

答案 0 :(得分: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.   ]])

答案 1 :(得分: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) ])

答案 2 :(得分: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]])