numpy型の文字列クラスについて

最近になった知ったことなのだが,NumpyにはPython標準の文字列クラスとは別の'numpy.string_'という型が使われていた. ちなみにunicode型であれば,Numpyでは'numpy.unicode'型に対応している.

調べてみてもそんなに情報がなく,ぼくが見つけられたのは,Numpyの公式ドキュメントの説明

このnumpyの文字列クラス,挙動が色々と不明だったので,試してみた.

>>> import numpy as np
>>> c = np.array(['aAaAaA', '  aA  ', 'abBABba'])
>>> c
array(['aAaAaA', '  aA  ', 'abBABba'], 
      dtype='|S7')
>>> type(c)
<type 'numpy.ndarray'>
>>> type(c[0])
<type 'numpy.string_'>

なるほど,ここではnumpy.string型になっている.

それでは,c[0]のaAaAaAをnumpy.unicode型にしてみよう.公式ドキュメントによれば,numpy.char.decodeメソッドがstring型からunicode型への変換を行なってくれるらしい.

>>> np.char.decode(c[0],'utf-8')
array(u'aAaAaA', 
      dtype='<U6')
>>> type(np.char.decode(c[0],'utf-8'))
<type 'numpy.ndarray'>
>>> type(np.char.decode(c,'utf-8')[0])
<type 'numpy.unicode_'>
>>> (np.char.decode(c,'utf-8')[0])
u'aAaAaA'

なるほど,しっかりnumpy.unicode型になっている.

では,numpy.unicode型というのは,python標準のunicode型と可換なのだろうか?

>>> if u'aAaAaA'==np.char.decode(c,'utf-8')[0]:
...     print True
... 
True

numpy.unicode型はpython標準のunicode型と比較可能である,ということがわかった.