下划线后缀,int_,float_等有什么意义?
更新: 在最新版本的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)
是找出最长字符串长度的另一种方法,这一步似乎是不可避免的......