2017-05-08 117 views
1

出于某种原因,我正努力用空格初始化numpy.chararray如何用空格填充Python numpy chararray?

这工作:

char_array1 = np.chararray((3, 3)) 
char_array1[:] = 'a' 
char_array1 

输出:

chararray([['a', 'a', 'a'], 
     ['a', 'a', 'a'], 
     ['a', 'a', 'a']], 
     dtype='|S1') 

这不:

char_array2 = np.chararray((3, 3)) 
char_array2[:] = ' ' 
char_array2 

输出:

chararray([['', '', ''], 
     ['', '', ''], 
     ['', '', '']], 
     dtype='|S1') 

这是什么造成的?我看不到任何选项去除物品或其他东西。

+0

从'help(chararray)':'chararray'类存在与Numarray的向后兼容性,不推荐用于新开发。从numpy1.4开始,如果需要字符串数组,建议使用'dtype'' object_','string_'或'unicode_'数组,并在'numpy.char'模块中使用free函数来快速矢量化的字符串操作。 –

回答

3

事实上字符数组做删除空白:

对战型STR或Unicode的规则NumPy的阵列,这类增加 以下功能:

值自动已经空白从端部时除去索引 当 比较值时,比较运算符自动删除空白字符串操作被提供为方法 (例如endswith)和中缀运算符(例如“+”,“*”,“%”)

所以答案是使用类型海峡或Unicode的规则阵列:

char_array3 = np.empty((3, 3), dtype='str') 
char_array3[:] = ' ' 
char_array3 

输出:

array([[' ', ' ', ' '], 
     [' ', ' ', ' '], 
     [' ', ' ', ' ']], 
     dtype='|S1') 
+2

我见过很少,如果对SO上的'chararray'有任何引用。 'dtype ='S ...''是常见的。我偶尔推荐了'np.char'函数。 – hpaulj

+0

@hpaulj我查看了'S'类型协议的文档,并在scipy文档中写道:“请注意,'str'是指根据Python版本的空终止字节或unicode字符串。 'U'或'np.unicode_'应该用作字符串的dtype。请参见[关于字符串类型的注意事项](https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#string- – Bill

+0

我想这取决于你是否要零终止字节('a'或'S'),或使用实际字节('b'),或实际字符串('U') – Bill

0

只是ndarray创建数组:

chararray = np.ndarray((3,3), dtype='S1') 
chararray[:]=' ' 

给:

array([[' ', ' ', ' '], 
    [' ', ' ', ' '], 
    [' ', ' ', ' ']], 
    dtype='|S1')