参数中的字符串类型必须与数组中的类型匹配:
In [44]: ff = np.array([['a:bc','d:ef'],['g:hi','j:kl']])
In [45]: ff
Out[45]:
array([['a:bc', 'd:ef'],
['g:hi', 'j:kl']], dtype='<U4')
In [46]: np.char.split(ff,':')
Out[46]:
array([[list(['a', 'bc']), list(['d', 'ef'])],
[list(['g', 'hi']), list(['j', 'kl'])]], dtype=object)
In [47]: np.char.split(ff.astype('S5'),b':')
Out[47]:
array([[list([b'a', b'bc']), list([b'd', b'ef'])],
[list([b'g', b'hi']), list([b'j', b'kl'])]], dtype=object)
'U4' 是 unicode,Py3 的默认字符串类型。 'S4' 是字节串,Py2 的默认类型。 b':' 是字节串,u':' 是 unicode。
这个np.char.split 使用起来有点尴尬,因为结果是object dtype,带有拆分字符串的列表。
要获得 2 个单独的数组,我会使用 frompyfunc 来应用解包:
In [50]: np.frompyfunc(lambda alist: tuple(alist), 1,2)(_46)
Out[50]:
(array([['a', 'd'],
['g', 'j']], dtype=object), array([['bc', 'ef'],
['hi', 'kl']], dtype=object))
In [51]: np.frompyfunc(lambda alist: tuple(alist), 1,2)(_47)
Out[51]:
(array([[b'a', b'd'],
[b'g', b'j']], dtype=object), array([[b'bc', b'ef'],
[b'hi', b'kl']], dtype=object))
虽然要获得字符串 dtype 数组,但我仍然可以使用 astype:
In [52]: _50[0].astype('U4')
Out[52]:
array([['a', 'd'],
['g', 'j']], dtype='<U4')
我可以通过提供otypes(甚至是dtypes的混合!)将解包和astype与np.vectorize结合起来:
In [53]: np.vectorize(lambda alist:tuple(alist), otypes=['U4','S4'])(_46)
Out[53]:
(array([['a', 'd'],
['g', 'j']], dtype='<U1'), array([[b'bc', b'ef'],
[b'hi', b'kl']], dtype='|S2'))
通常frompyfunc 比vectorize 快。
如果拆分创建不同长度的列表,则此解包将不起作用:
In [54]: ff = np.array([['a:bc','d:ef'],['g:hi','j:kl:xyz']])
In [55]: np.char.split(ff,':')
Out[55]:
array([[list(['a', 'bc']), list(['d', 'ef'])],
[list(['g', 'hi']), list(['j', 'kl', 'xyz'])]], dtype=object)
===
使用chararray,所有这些np.char 函数都可以作为方法使用。
In [59]: np.char.asarray(ff)
Out[59]:
chararray([['a:bc', 'd:ef'],
['g:hi', 'j:kl:xyz']], dtype='<U8')
In [60]: np.char.asarray(ff).split(':')
Out[60]:
array([[list(['a', 'bc']), list(['d', 'ef'])],
[list(['g', 'hi']), list(['j', 'kl', 'xyz'])]], dtype=object)
请参阅np.char 文档中的说明:
chararray 类的存在是为了向后兼容
Numarray,不建议用于新开发。从 numpy 开始
1.4,如果需要字符串数组,建议使用数组
dtypeobject_、string_或unicode_,并使用免费功能
在numpy.char 模块中进行快速向量化字符串操作。