如何在numpy.vectorize中显式指定输出的字符串长度

时间:2012-08-27 06:17:37

标签: python numpy

我正在尝试使用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')

我也试过明确地指定otypes,但即使这样它似乎也不起作用。

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 个答案:

答案 0 :(得分:1)

这似乎是Numpy中的一个已知错误:http://projects.scipy.org/numpy/ticket/1892

您的解决方法看起来不错。您可能想要在Numpy邮件列表上询问或对错误故障单进行评论。似乎最近没有采取行动解决它。