Добавлять столбцы двоичных значений в Python - PullRequest
0 голосов
/ 23 октября 2018

Я хочу, чтобы двоичное значение строки сохранялось в столбце массива.

st = "hello world"
st = st.encode('utf-8')
# binary value for letter 'h'
bin(st[0]) -> '0b1101000'
# binary value for letter 'e'
bin(st[1]) -> '0b1100101'

и т. Д. *

Я хочу сохранить эти двоичные строки в массиве, как показано ниже:

0  1  
0  0
0  1
1  0
0  0
1  1
1  1
b  b
0  0

Спасибо, Neeraj

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы можете использовать np.fromstring и np.unpackbits:

>>> a = np.unpackbits(np.fromstring(st, np.uint8)).reshape((8, -1), order='F')[::-1]
>>> a
array([[0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0],
       [0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0],
       [0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1],
       [1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0],
       [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)

Не содержит символ b.Если вам нужно это:

>>> np.r_['0,2,1', a.astype('U1')[:7], np.full(a.shape[1], 'b'), np.full(a.shape[1], '0')]
array([['0', '1', '0', '0', '1', '0', '1', '1', '0', '0', '0'],
       ['0', '0', '0', '0', '1', '0', '1', '1', '1', '0', '0'],
       ['0', '1', '1', '1', '1', '0', '1', '1', '0', '1', '1'],
       ['1', '0', '1', '1', '1', '0', '0', '1', '0', '1', '0'],
       ['0', '0', '0', '0', '0', '0', '1', '0', '1', '0', '0'],
       ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'],
       ['1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1'],
       ['b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'],
       ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']],
      dtype='<U1')
0 голосов
/ 23 октября 2018

Более питонический способ преобразования строки в двоичный:

st = "hello world"
m = map(bin,bytearray(st))

Это создает список m, как показано ниже:

print(m)
['0b1101000',
 '0b1100101',
 '0b1101100',
 '0b1101100',
 '0b1101111',
 '0b100000',
 '0b1110111',
 '0b1101111',
 '0b1110010',
 '0b1101100',
 '0b1100100']

Затем вы можете просто транспонироватьи присоединяйтесь, используя запятые.

m_transpose = [ [j] for j in [ ','.join(i[::-1]) for i in m ]]

    In [1038]: m_transpose
    Out[1038]: 
 [['0,0,0,1,0,1,1,b,0'],
 ['1,0,1,0,0,1,1,b,0'],
 ['0,0,1,1,0,1,1,b,0'],
 ['0,0,1,1,0,1,1,b,0'],
 ['1,1,1,1,0,1,1,b,0'],
 ['0,0,0,0,0,1,b,0'],
 ['1,1,1,0,1,1,1,b,0'],
 ['1,1,1,1,0,1,1,b,0'],
 ['0,1,0,0,1,1,1,b,0'],
 ['0,0,1,1,0,1,1,b,0'],
 ['0,0,1,0,0,1,1,b,0']]

Дайте мне знать, если вы этого хотите.

...