在numpy中将int数组转换为字符串数组而不进行截断

2024-04-25 13:34:20 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试在numpy中将int数组转换为字符串数组

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是足够大,以举行我的最长的字符串。有没有一种方法可以在不提前知道你需要多大尺寸的绳子的情况下轻松地做到这一点?似乎有点危险,它只是悄悄地截断你的字符串,而没有抛出一个错误。


Tags: 方法字符串innumpy尺寸数组outarray
3条回答

同样,这可以用纯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')

你可以呆在纽比,做

np.char.mod('%d', a)

这比10个元素的map或列表理解快两倍,100个元素的4倍。此字符串操作和其他字符串操作都有文档here

您可以找到最小的足够宽度,如下所示:

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

相关问题 更多 >