2013-07-19 41 views
1

我有一個字符。我想將它的ascii值表示爲一個布爾值數組。 這工作,但似乎扭曲。有沒有更好的辦法?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

此外,寬度= 4參數是不必要的,所以np.array(列表(np.binary_repr(ord(mychar))))。astype('bool')的作品 – persephani

+0

好吧,這是最接近我最終的解決方案,它doesn除了數組本身之外,不會使用任何其他的numpy函數:np.array(list(bin(ord('d'))))[2:]。astype(bool) – persephani

1

您可以直接使用np.unpackbits提取從UINT8陣位:

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

編輯:要在布爾數組只得到7相關位:

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

這不正是我想要的 - 它是一組數字,而不是布爾值。得到布爾結果我想我需要做數組(np.unpackbits(np.array(ord(mychar),dtype = np.uint8))])中的[x> 0。而且這還不完全正確,因爲它預示着一個False會從ascii的7位中獲得uint8。 – persephani

+0

雖然我以前並不知道unpackbits,這對其他問題看起來很有用,所以謝謝。 – persephani

+0

查看編輯解決你的兩個警告。 – Jaime