Economist_Ayahuasca
Economist_Ayahuasca

Reputation: 1642

Numpy array of strings into an array of integers

I have the following array:

pattern = array([['[0, 0, 1, 0, 0]'],
       ['[0, 1, 1, 1, 1]'],
       ['[0, 1, 1, 1, 0]'],
       ['[0, 0, 1, 1, 1]'],
       ['[0, 0, 0, 1, 1]'],
       ['[0, 0, 1, 0, 1]'],
       ['[0, 0, 0, 0, 1]'],
       ['[1, 0, 1, 0, 0]'],
       ['[0, 1, 0, 1, 1]'],
       ['[0, 0, 1, 1, 0]'],
       ['[1, 1, 1, 1, 1]'],
       ['[1, 1, 1, 1, 0]']], dtype='<U15')

and I want to get it in non-string format as the following:

import numpy
my_array = numpy.array([[0, 0, 1, 0, 0],
                        [0, 1, 1, 1, 1],
                        [0, 1, 1, 1, 0],
                        [0, 0, 1, 1, 1],
                        [0, 0, 0, 1, 1],
                        [0, 0, 1, 0, 1],
                        [0, 0, 0, 0, 1],
                        [1, 0, 1, 0, 0],
                        [0, 1, 0, 1, 1],
                        [0, 0, 1, 1, 0],
                        [1, 1, 1, 1, 1],
                        [1, 1, 1, 1, 0]
                        ])

Any idea on how to do it non-manually?

Upvotes: 0

Views: 105

Answers (1)

cottontail
cottontail

Reputation: 23151

Using numpy string operations to strip brackets ([]), splitting on comma and recast into an array with int dtype is possible:

np.array(np.char.split(np.char.strip(pattern[:, 0], '[]'), ', ').tolist(), 'int')

but a list comprehension where you do the same things using python string methods is much easier to read (and faster as well) imo.

np.array([row[0][1:-1].split(', ') for row in pattern], dtype='int')


# array([[0, 0, 1, 0, 0],
#        [0, 1, 1, 1, 1],
#        [0, 1, 1, 1, 0],
#        [0, 0, 1, 1, 1],
#        [0, 0, 0, 1, 1],
#        [0, 0, 1, 0, 1],
#        [0, 0, 0, 0, 1],
#        [1, 0, 1, 0, 0],
#        [0, 1, 0, 1, 1],
#        [0, 0, 1, 1, 0],
#        [1, 1, 1, 1, 1],
#        [1, 1, 1, 1, 0]])

Upvotes: 1

Related Questions