在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')
答案 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.savetxt
和np.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.]])