2013-07-19 5 views
1

У меня есть персонаж. Я хочу представить его значение ascii как numpy массив логических значений. Это работает, но кажется искаженным. Есть ли способ лучше?python: преобразовать символ ascii в логический массив

bin_str = bin(ord(mychar)) 
bool_array = array([int(x)>0 for x in list(bin_str[2:])], dtype=bool) 

для

mychar = 'd' 

желаемое результирующее значение для bool_array является

array([ True, True, False, False, True, False, False], dtype=bool) 
+0

Вы можете проверить это , https://pypi.python.org/pypi/bitarray/ – Karthikeyan

+0

Это похоже на неправильный инструмент (предназначенный для взаимодействия с двоичными файлами, а не с конверсиями внутри кода python), и даже если он будет делать то, что я хочу, импортируя c на основе модуля ms как худшее решение, чем то, что у меня уже есть. – persephani

ответ

0

Это более или менее то же самое:

>>> import numpy as np 
>>> mychar = 'd' 
>>> np.array(list(np.binary_repr(ord(mychar), width=4))).astype('bool') 
array([ True, True, False, False, True, False, False], dtype=bool) 

ли менее искаженным?

+0

мне легче читать и дает правильный результат, да, да. Спасибо. – persephani

+0

также не требуется аргумент width = 4, поэтому np.array (list (np.binary_repr (ord (mychar)))). Astype ('bool') работает – persephani

+0

ok, это ближе всего к моему возможному решению, которое не работает 't использовать любые другие функции numpy, кроме самого массива: np.array (list (bin (ord (' d ')))) [2:]. astype (bool) – persephani

1

Вы можете извлечь биты из массива в формате uint8 непосредственно с помощью np.unpackbits:

np.unpackbits(np.array(ord(mychar), dtype=np.uint8)) 

EDIT: Для того, чтобы получить только 7 соответствующие биты в булевой массиве:

np.unpackbits(np.array(ord(mychar), dtype=np.uint8)).astype(bool)[1:] 
+0

это не совсем то, что я хочу - это массив чисел, а не булев. Чтобы получить логический результат, я хочу, чтобы мне понадобился массив ([x> 0 для x в np.unpackbits (np.array (ord (mychar), dtype = np.uint8))]). И все же это не совсем правильно, потому что оно добавляет False, чтобы получить uint8 из 7 бит ascii. – persephani

+0

, хотя я раньше не знал о распаковках, которые выглядят полезными для других проблем, поэтому спасибо. – persephani

+0

См. Редактирование, разрешающее ваши два оговорки. – Jaime

Смежные вопросы