相关疑难解决方法(0)

10
推荐指数
2
解决办法
3683
查看次数

如何将numpy对象数组转换为str/unicode数组?

更新: 在最新版本的numpy(例如,v1.8.1)中,这不再是一个问题.这里提到的所有方法现在都是例外.

原始问题: 有时使用对象dtype存储字符串数组很方便,特别是当需要修改大数组的内容而不事先了解字符串的最大长度时,例如,

>>> import numpy as np
>>> a = np.array([u'abc', u'12345'], dtype=object)
Run Code Online (Sandbox Code Playgroud)

在某些时候,人们可能想要将dtype转换回unicode或str.但是,简单的转换会截断长度为4或1的字符串(为什么?),例如,

>>> b = np.array(a, dtype=unicode)
>>> b
array([u'abc', u'1234'], dtype='<U4')
>>> c = a.astype(unicode)
>>> c
array([u'a', u'1'], dtype='<U1')
Run Code Online (Sandbox Code Playgroud)

当然,可以总是显式迭代整个数组以确定最大长度,

>>> d = np.array(a, dtype='<U{0}'.format(np.max([len(x) for x in a])))
array([u'abc', u'12345'], dtype='<U5')
Run Code Online (Sandbox Code Playgroud)

然而,在我看来,这有点尴尬.有一个更好的方法吗?

编辑添加: 根据这个密切相关的问题,

>>> len(max(a, key=len))
Run Code Online (Sandbox Code Playgroud)

是找出最长字符串长度的另一种方法,这一步似乎是不可避免的......

python string numpy type-conversion

8
推荐指数
2
解决办法
2万
查看次数