2016-08-11 23 views
0

convert a string representation of a list to a listast.literal_evalを使用できます。 numpy配列と同等のものはありますか? ast.literal_eval(xs)を使用して配列の文字列表現をPythonのnumpy配列に変換します

x = arange(4) 
xs = str(x) 
xs 
'[0 1 2 3]' 
# how do I convert xs back to an array 

SyntaxErrorを発生させます。私が必要な場合は、文字列の解析を行うことができますが、より良い解決策があるかもしれないと思いました。

+0

はnumpyの配列も、Pythonのリストを再構築するために使用することができます 'repr'を提供していません。文字列を整理してリストを作り直して、それから数えきれない配列を作成することができます。 'numpy.array(ast.literal_eval( '、' .join(xs.split( ''))))' –

+0

'ast.literal_eval'を使用することは必須ですか?もしそうなら、答えは* no *です。あなたは 'literal_eval'からnumpy配列を得ることができません。 'ast.literal_eval(node_or_string)'のPythonドキュメントから: "提供される文字列またはノードは、文字列、数値、タプル、リスト、辞書、ブール値、およびNoneのPythonリテラル構造のみで構成されます。あなたが本当に望むのは、numpyの配列を文字列に変換してから配列に戻す便利な方法です。質問にその点を詳しく記入してください。 –

+0

ご迷惑をおかけして申し訳ありません。 ast.literal_evalのアナログがあり、numpyの配列で動作していましたが、ast.literal_evalを使用するとは思っていませんでした。 – jdmcbr

答えて

1

Numpyには、fromstringという文書番号hereという機能があります。小さな差がはブラケットを含むべきではない文字列である

s = '0 1 2 3' 
a = np.fromstring(s, dtype=np.int, sep=' ') 
print(a) # [0 1 2 3] 

:簡単に言えば、あなたはこのように文字列を解析することができます。

+0

さて、それは間違いなく私がやろうとしていたこと以上の改善です。 – jdmcbr

4

このを皮切り:

x = arange(4) 
xs = str(x) 
xs 

'[0 1 2 3]'  

はこれを試してみてください:

import re, ast 
xs = re.sub('\s+', ',', xs) 
a = np.array(ast.literal_eval(xs)) 
a 

array([0, 1, 2, 3])  
+0

もう一つの答えが私の質問に答えてくれたと思います。私はあなたがなぜこの質問をするのかをよく理解できません。あなたは私が答えを受け入れる前に、はっきりと答えていた。 – jdmcbr

+0

理由は簡単です。与えられたコードサンプルでは、​​答えは機能しません! – Merlin

+0

これは、私が解決しようとしていた問題のために、忘れてしまった 'np.fromstring'の使い方をはっきりと示した自己完結型の例です。私は私の質問で "必要ならば文字列解析もできる"と言った。だから私はあなたの答えから何も学んでいないが、私は他の人から何かを学んだ。 – jdmcbr

関連する問題