17

更新: numpy の最新バージョン (v1.8.1 など) では、これはもはや問題ではありません。ここに記載されているすべてのメソッドは、例外として機能するようになりました。

元の質問: オブジェクト dtype を使用して文字列配列を格納すると便利な場合があります。特に、文字列の最大長について事前に知らなくても大きな配列の内容を変更する必要がある場合などです。

>>> import numpy as np
>>> a = np.array([u'abc', u'12345'], dtype=object)

ある時点で、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')

もちろん、配列全体を明示的に繰り返し処理して、最大長を決定することもできます。

>>> d = np.array(a, dtype='<U{0}'.format(np.max([len(x) for x in a])))
array([u'abc', u'12345'], dtype='<U5')

しかし、これは私の意見では少し厄介です。これを行うより良い方法はありますか?

追加する編集: この密接に関連する質問によると、

>>> len(max(a, key=len))

最長の文字列の長さを調べる別の方法であり、このステップは避けられないようです...

4

2 に答える 2

21

これは古い質問であることは知っていますが、誰かがそれに出くわして答えを探している場合は、試してください

c = a.astype('U')

期待どおりの結果が得られるはずです。

c = array([u'abc', u'12345'], dtype='<U5')
于 2014-09-08T00:13:23.443 に答える