在没有截断的情况下将int数组转换为numpy中的字符串数组

Dav*_*415 27 python numpy

试图将int数组转换为numpy中的字符串数组

In [66]: a=array([0,33,4444522])
In [67]: a.astype(str)
Out[67]: 
array(['0', '3', '4'], 
      dtype='|S1')
Run Code Online (Sandbox Code Playgroud)

不是我的意图

In [68]: a.astype('S10')
Out[68]: 
array(['0', '33', '4444522'], 
      dtype='|S10')
Run Code Online (Sandbox Code Playgroud)

这可行,但我必须知道10足够大,可以保持我最长的字符串.有没有办法在不事先知道你需要什么尺寸的字符串的情况下轻松完成这项工作?它似乎有点危险,它只是静静地截断你的字符串而不会抛出错误.

Nik*_* B. 37

同样,这可以用纯Python解决:

>>> map(str, [0,33,4444522])
['0', '33', '4444522']
Run Code Online (Sandbox Code Playgroud)

或者如果你需要来回转换:

>>> a = np.array([0,33,4444522])
>>> np.array(map(str, a))
array(['0', '33', '4444522'], 
      dtype='|S7')
Run Code Online (Sandbox Code Playgroud)

  • `列表(地图(str,[0,33,4444522]))` (4认同)

jor*_*eca 37

你可以保持笨拙

np.char.mod('%d', a)
Run Code Online (Sandbox Code Playgroud)

这比map10个元素的列表推导速度快两倍,比100个元素快4倍.这里记录这个和其他字符串操作.


jpp*_*jpp 10

使用arr.astype(str), as inttostr转换现在由numpy所需的结果支持:

import numpy as np

a = np.array([0,33,4444522])

res = a.astype(str)

print(res)

array(['0', '33', '4444522'], 
      dtype='<U11')
Run Code Online (Sandbox Code Playgroud)