python numpy中字符串和数组之间的转换

时间:2013-10-18 07:40:07

标签: python arrays numpy

我想将numpy.array数据保存到XML文件中,然后再次读取。以下是我的代码:

数组到字符串

arr=numpy.zeros((20))
s = str(arr) 

但是这种方式会在字符串中生成输入密钥和' ['],#39; 字符。

字符串到数组
我应该删除回车键和' [',']'第一。然后使用numpy.fromstring

但我认为这不是一个很好的方法。 这不适用于二维阵列

3 个答案:

答案 0 :(得分:2)

你正在混合使用两种不同的方法来做“字符串”:

a = numpy.zeros((20))

您可以在删除换行符并[]之后,将str(a)放入新的numpy.matrix()构造函数中,并使用返回的值初始化numpy.array()

b = numpy.array(numpy.matrix(" ".join(str(a).split()).strip('[]')))

或者您可以将numpy.array.tostring()numpy.fromstring()结合使用:

c = numpy.fromstring(a.tostring())

但是你试图做的混合和匹配不起作用。

答案 1 :(得分:1)

您可以轻松地将numpy数组转换为常规python列表,反之亦然。然后,您可以将列表的字符串表示形式存储到文件中,从文件中加载它,将其转换回列表并转换为numpy数组。

>>> list(numpy.zeros(4))
[0.0, 0.0, 0.0, 0.0]
>>> numpy.array([0.0, 0.0, 0.0, 0.0])
array([ 0.,  0.,  0.,  0.])

使用map功能,这也适用于2D阵列。

>>> map(list, numpy.zeros((2, 3)))
[[0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]
>>> numpy.array([[0.0, 0.0], [0.0, 0.0]])
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

但是,如果数组非常大,使用numpy.savenumpy.load存储它可能仍然更好,并且仅使用XML文件存储该文件的路径以及注释。

答案 2 :(得分:0)

除了使用save and load将ndarray转储到.npy文件并在xml中注明该文件的详细信息之外,您还可以使用Nils Werner所述的数据创建一个字符串。

注意:您可能需要查看HDFpytables(使用hdf)。