尝试将int数组转换为numpy中的字符串数组
In [66]: a=array([0,33,4444522])
In [67]: a.astype(str)
Out[67]:
array(['0', '3', '4'],
dtype='|S1')
不是我的意图
In [68]: a.astype('S10')
Out[68]:
array(['0', '33', '4444522'],
dtype='|S10')
这可行,但我必须知道10足够大,可以保持我最长的弦。有没有办法在不事先知道你需要什么尺寸的字符串的情况下轻松完成这项工作?它似乎有点危险,它只是悄悄截断你的字符串而不会抛出错误。
答案 0 :(得分:37)
同样,这可以用纯Python解决:
>>> map(str, [0,33,4444522])
['0', '33', '4444522']
或者如果你需要来回转换:
>>> a = np.array([0,33,4444522])
>>> np.array(map(str, a))
array(['0', '33', '4444522'],
dtype='|S7')
答案 1 :(得分:35)
答案 2 :(得分:3)
您可以找到最小的足够宽度:
In [3]: max(len(str(x)) for x in [0,33,4444522])
Out[3]: 7
或者,只需从字符串列表中构造ndarray
:
In [7]: np.array([str(x) for x in [0,33,4444522]])
Out[7]:
array(['0', '33', '4444522'],
dtype='|S7')
或使用map()
:
In [8]: np.array(map(str, [0,33,4444522]))
Out[8]:
array(['0', '33', '4444522'],
dtype='|S7')
答案 3 :(得分:1)
使用arr.astype(str)
,int
str
转换现在numpy
支持所需的结果:
import numpy as np
a = np.array([0,33,4444522])
res = a.astype(str)
print(res)
array(['0', '33', '4444522'],
dtype='<U11')
答案 4 :(得分:0)
np.apply_along_axis(lambda y: [str(i) for i in y], 0, x)
实施例
>>> import numpy as np
>>> x = np.array([-1]*10+[0]*10+[1]*10)
array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
>>> np.apply_along_axis(lambda y: [str(i) for i in y], 0, x).tolist()
['-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0',
'0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1',
'1', '1', '1', '1']