2012-08-27 38 views
1

我試圖用numpy.vectorize一些整數轉換爲字符串輸出的字符串長度。但是,似乎輸出字符串總是限制爲最多8個字符。如何明確指定numpy.vectorize

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') 

我也嘗試明確指定型,但即使這樣似乎並不奏效。

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') 

有沒有更好的方法來做到這一點?

回答

1

這似乎是一個已知的bug在與NumPy:http://projects.scipy.org/numpy/ticket/1892

你的解決辦法看起來不錯。您可能需要在Numpy郵件列表上提問或評論錯誤票。似乎沒有最近的行動來修復它。

+0

感謝您的信息。 –