1

numpy.vectorizeを使用して、いくつかの整数を文字列に変換しようとしています。ただし、出力文字列は常に最大8文字に制限されているようです。

In [1]: import numpy as np

In [2]: str = "abcdefghijklmnopqrstuvwxyz"

In [3]: def num_str(num):
   ...:     return str[:num]
   ...: 

In [4]: np.vectorize(num_str)(np.arange(15))
Out[4]: 
array(['', 'a', 'ab', 'abc', 'abcd', 'abcde', 'abcdef', 'abcdefg',
       'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh',
       'abcdefgh', 'abcdefgh'], 
      dtype='|S8')

また、otypeを明示的に指定しようとしましたが、それでも機能しないようです。

In [5]: np.vectorize(num_str, otypes=["|S25"])(np.arange(15))
Out[5]: 
array(['', 'a', 'ab', 'abc', 'abcd', 'abcde', 'abcdef', 'abcdefg',
       'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh', 'abcdefgh',
       'abcdefgh', 'abcdefgh'], 
      dtype='|S8')

今のところ、otypeをオブジェクトとして設定し、最終的に文字列に変換しています。

In [6]: np.vectorize(num_str, otypes=["O"])(np.arange(15)).astype('|S25')
Out[6]: 
array(['', 'a', 'ab', 'abc', 'abcd', 'abcde', 'abcdef', 'abcdefg',
       'abcdefgh', 'abcdefghi', 'abcdefghij', 'abcdefghijk',
       'abcdefghijkl', 'abcdefghijklm', 'abcdefghijklmn'], 
      dtype='|S25')

これを行うためのより良い方法はありますか?

4

1 に答える 1

1

Numpy の既知のバグのようです: http://projects.scipy.org/numpy/ticket/1892

あなたの回避策は良さそうです。Numpy メーリング リストで質問するか、バグ チケットにコメントしてください。それを修正するための最近の行動はないようです。

于 2012-08-27T06:38:07.500 に答える