2012-03-09 105 views
2

打印为例:撤消漂亮从numpy的

from numpy import * 
A = array([2/3., 4]) 
print A 

给人

[ 0.66666667 4.  ] 

如何把字符串:

S = "[ 0.66666667 4.  ]" 

,并转换S回到A使用numpy电话只要?我有一个黑客解决方案,但似乎应该有一个这样做的numpy内置。我看着fromstring,但是当我直接使用它,它给我的错误:

fromstring(S) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: string size must be a multiple of element size 
+0

它可能是,如果你可以'再版(A)'或'印刷再版(A)'更容易,那么你可以使用'ast.literal_eval'。 – 2012-03-09 22:42:22

回答

3

你需要fromstring(S, sep=' ')。几乎将字符串解析为打包的二进制数据而不是可打印的浮点数。该字符串应该只包含数字和分隔符(空格),所以修剪它以去掉括号。例如,S[1:-1]。你可能知道这一点,但让我们拼出来:这可能是恢复计算结果(或从错误中恢复)的方便,但它不是一个好方法来存储和重新加载数据。这是不方便的,你在转换中失去了精确度。你的函数应该返回一个数组而不是将其打印出来,如果你需要存储数据供以后的程序运行使用,则使用数字存储格式(例如,参见cPickle模块或任何numpy提供的用途 - 注意fromstring还可以阅读打包二进制数据)

+1

我没有看到和你一样的东西:'print fromstring(S,sep ='')'用上面的字符串给出'[-1。]'。难道我做错了什么?来自字符串的 – Hooked 2012-03-09 21:21:45

+1

应该只包含数字。跳过括号如下:'fromstring(S [1:-1],sep ='')'。 – alexis 2012-03-09 21:24:20

+0

这只会在数组为1d时有效。 – 2012-03-09 22:40:34