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