2016-07-27 4 views
2
#Input: 
chararr = np.chararray((3, 5)) 
chararr[:] = 'a' 
chararr 

#Output: 
chararray([[b'a', b'a', b'a', b'a', b'a'], 
    [b'a', b'a', b'a', b'a', b'a'], 
    [b'a', b'a', b'a', b'a', b'a']], 
    dtype='|S1') 

Мой вопрос где же, что «Ъ» пришел из ... Я получил от этого jupyter ноутбука и PyCharmЧто случилось с numpy.chararray

ответ

1

b перед строка показывает, что он является байт литерал. Они являются экземплярами байт типов вместо str и могут содержать только символы ASCII.

str Литералы представляют собой последовательность символов Юникода (UTF-16 или UTF-32).

byte литералы - это последовательность октетов (ASCII).

Не волнуйтесь, они не являются частью фактической строки. См., b, не входят в кавычки.

Для получения дополнительной информации перейдите к python's official website.

+0

Спасибо, что помогает. –

+0

@MaximShen Добро пожаловать. –

1

В Python3 типа строка по умолчанию Юникода. Вычисления отображаются с флагом b. Обратите внимание на <S1 dtype? Это означает, что байты, <U1 для юникода (это верно как для Py2, так и для Py3).

chararray имеет параметр unicode.

In [161]: A=np.chararray((3,5),unicode=True) 
In [162]: A[:]='a' 
In [163]: A 
Out[163]: 
chararray([['a', 'a', 'a', 'a', 'a'], 
     ['a', 'a', 'a', 'a', 'a'], 
     ['a', 'a', 'a', 'a', 'a']], 
     dtype='<U1') 

Если бы я сделал то же самое в py2, я бы видеть u'a'.

+0

Спасибо, что помогает. –