In [253]: Boolval = np.where([0,1,0,0,1,0,1],b'true',b'false')
In [254]: Boolval # the repr display
Out[254]:
array([b'false', b'true', b'false', b'false', b'true', b'false', b'true'],
dtype='|S5')
In [255]: print(Boolval) # the str display
[b'false' b'true' b'false' b'false' b'true' b'false' b'true']
In [256]: Boolval!=b'false'
Out[256]: array([False, True, False, False, True, False, True])
In [257]: Boolval==b'true'
Out[257]: array([False, True, False, False, True, False, True])
Мы можем преобразовать его в логический массив со сравнением с байтовой строкой:
In [256]: Boolval!=b'false'
Out[256]: array([False, True, False, False, True, False, True])
In [257]: Boolval==b'true'
Out[257]: array([False, True, False, False, True, False, True])
и целочисленный массив с astype
преобразованием:
In [258]: (Boolval!=b'false').astype(int)
Out[258]: array([0, 1, 0, 0, 1, 0, 1])
In [259]: np.where(Boolval==b'true')
Out[259]: (array([1, 4, 6]),)
И подход к пониманию списка:
In [260]: [int(b == b'true') for b in Boolval]
Out[260]: [0, 1, 0, 0, 1, 0, 1]
Если мы начнем со списка, его понимание часто происходит быстрее. Но, начиная с массива, он, скорее всего, будет медленнее. Хотя здесь пример небольшой, и тест на равенство строк не так быстр, как числовые операции.