2012-03-09 103 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