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.
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.
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.
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.
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])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With