python 将字符串数组转换为整数数组

mklgxw1f  于 2022-12-21  发布在  Python
关注(0)|答案(1)|浏览(225)

我有以下数组:

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')

我想把它转换成非字符串格式,如下所示:

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]
                        ])

有没有什么办法不用手就能搞定?

41ik7eoe

41ik7eoe1#

可以使用numpy字符串操作去掉括号([]),在逗号处拆分,然后重新转换为int dtype数组:

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

但是使用Python字符串方法做同样事情的列表理解更容易阅读(也更快)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]])

相关问题