从字符串重建2D数组

时间:2015-03-09 00:33:25

标签: python numpy

在Python中,我有一个从2D数组( a )转换而来的字符串(以下示例中的 b )。如何从字符串重建2D数组?

我想我使用了错误的功能" numpy.fromstring"因为 c 这里是一维数组。

import numpy
a = numpy.array([[1,2],[3,4]], dtype='float32')
b = a.tostring()
c = numpy.fromstring(b, dtype='float32')

2 个答案:

答案 0 :(得分:0)

a.tostring()返回的字符串记录a的确切形状,而不是记录项目类型(此处为float32)。 fromstring 始终会返回一维数组 - 请参阅http://docs.scipy.org/doc/numpy/reference/generated/numpy.fromstring.html处的文档 - 如果需要,您必须适当地重新整理数组:

>>> c.reshape([2,2])
array([[ 1.,  2.],
       [ 3.,  4.]], dtype=float32)

至于如何保留[2,2]形状和float32类型以便能够恢复它 - 对于两者而言,您需要自行安排! - )

答案 1 :(得分:0)

另一种保存阵列形状的方法是使用np.savetxtnp.loadtxt。这些函数需要文件作为输入,因此我们将使用StringIO来创建类似文件的字符串对象:

>>> import numpy
>>> from StringIO import StringIO
>>> a = numpy.array([[1,2],[3,4]], dtype='float32')
>>> io = StringIO()
>>> numpy.savetxt(io, a)
>>> s = io.getvalue()
>>> s
'1.000000000000000000e+00 2.000000000000000000e+00\n3.000000000000000000e+00 4.000000000000000000e+00\n'

我们可以使用np.loadtxt从此字符串中恢复数组,并将其包装在另一个StringIO中:

>>> numpy.loadtxt(StringIO(s))
array([[ 1.,  2.],
       [ 3.,  4.]])