2016-08-11 67 views
0

我可以convert a string representation of a list to a listast.literal_eval。是否有相当于一个numpy数组?将数组的字符串表示形式转换为Python中的numpy数组

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

使用ast.literal_eval(xs)产生了SyntaxError。如果需要,我可以进行字符串解析,但我认为可能有更好的解决方案。

+0

的numpy的数组不提供可以用于重建甚至蟒蛇列表'repr'。你可以修改字符串来重新创建一个列表,然后从该列表创建一个numpy数组。 'numpy.array(ast.literal_eval(','.join(xs.split(''))))' –

+0

使用'ast.literal_eval'是否很重要?如果是这样,那么答案是* no *,你不能从'literal_eval'得到一个numpy数组。来自'ast.literal_eval(node_or_string)'的python文档:“提供的字符串或节点可能只包含以下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

相关问题