2017-05-08 115 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')