TipsBookmarkTwitterFacebook読者になるnumpy配列に文字列を格納した場合、どう扱われるのか知らなかったので、調査してみました。'numpy.str_'>配列そのものは「<U1」なる型になります。要素を取り出すとnumpy.str_という型です。要素の型は別にどうでも良いのですが、中身の実体は何なのでしょうか。ドキュメントにはイマイチ親切な説明がありませんが、こちらなどに一応書いてあります。Manualリトルエンディアンの長さ1(固定長)のユニコード文字列のようです。固定長ということなので、いろいろやってみます。sys.getsizeof(a)4009696バイトのおまけが付いてきますが、基本的には1要素あたり4byte=32bitで表現するようです。内部的にUCS4で表現されているから、ということだと思います。ASCIIもマルチバイトも同じ大きさで表現できます。sys.getsizeof(a)40096固定長フォーマットなので、文字数を増やすとお察しの通りの現象が発生します。お気付きの通り、一番長さが大きい要素に引っ張られます。sys.getsizeof(a)400096メモリ効率は悪いです。numpyというのはそもそも固定データサイズ前提の設計になっているので、仕方ありません。型のことはわかったので、いろいろな操作をしてみます。indexingを試してみましょう。a[0][1]'b'C言語のcharの2次元配列みたいな実装になっていることは容易に想像できるのですが、numpy配列としてはndim==1なので、都合よく要素を取り出せたりはしません。代入してmutableな文字列として使うというのも不可能なようです。通常の演算などが行えるかを確認します。文字列とintの掛け算のみが行えるはずです。dtype('<U3')numpyの内部表現そのままの型だと演算は受け付けてくれないようです。object型(要するにただのstrということだと思う)に変換すれば、いけるようです。dtype=object)ということなので、全体を通して最初からobject型で配列を作っておけば良いと思いました。逆に、numpyの内部表現で持っておくメリットはあるのでしょうか・・・。このブログについてスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。