Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

convert string representation of array to numpy array in python

Tags:

python

numpy

I can convert a string representation of a list to a list with ast.literal_eval. Is there an equivalent for a numpy array?

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

Using ast.literal_eval(xs) raises a SyntaxError. I can do the string parsing if I need to, but I thought there might be a better solution.

like image 427
jdmcbr Avatar asked Aug 11 '16 03:08

jdmcbr


People also ask

How do you convert a string to an array in Python?

The most straightforward way is to type cast the string into a list. Tyepcasting means to directly convert from one data type to another – in this case from the string data type to the list data type. You do this by using the built-in list() function and passing the given string as the argument to the function.

Can NumPy work with arrays of strings?

Starting from numpy 1.4, if one needs arrays of strings, it is recommended to use arrays of dtype object_ , string_ or unicode_ , and use the free functions in the numpy. char module for fast vectorized string operations.


2 Answers

For 1D arrays, Numpy has a function called fromstring, so it can be done very efficiently without extra libraries.

Briefly you can parse your string like this:

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

For nD arrays, one can use .replace() to remove the brackets and .reshape() to reshape to desired shape, or use Merlin's solution.

like image 67
Da Tong Avatar answered Sep 30 '22 09:09

Da Tong


Try this:

xs = '[0 1 2 3]'

import re, ast
ls = re.sub('\s+', ',', xs)
a = np.array(ast.literal_eval(ls))
a  # -> array([0, 1, 2, 3])    
like image 30
Merlin Avatar answered Sep 30 '22 11:09

Merlin