Как преобразовать логический массив в массив int
Я использую Scilab и хочу преобразовать массив булевых значений в массив целых чисел:
>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False, True, True], dtype=bool)
В Scilab я могу использовать:
>>> bool2s(y)
0. 0. 1. 1.
или даже просто умножьте его на 1:
>>> 1*y
0. 0. 1. 1.
есть ли простая команда для этого в Python, или мне придется использовать цикл?
5 ответов:
массивы Numpy имеют
astype
метод. Просто сделайy.astype(int)
.обратите внимание, что это может даже не понадобиться, в зависимости от того, для чего вы используете массив. Bool будет автоматически переведен в int во многих случаях, поэтому вы можете добавить его в массивы int без явного преобразования:
>>> x array([ True, False, True], dtype=bool) >>> x + [1, 2, 3] array([2, 2, 4])
The
1*y
метод работает и в Numpy:>>> import numpy as np >>> x = np.array([4, 3, 2, 1]) >>> y = 2 >= x >>> y array([False, False, True, True], dtype=bool) >>> 1*y # Method 1 array([0, 0, 1, 1]) >>> y.astype(int) # Method 2 array([0, 0, 1, 1])
если вы просите способ преобразования списков Python из Boolean в int, вы можете использовать
map
для этого:>>> testList = [False, False, True, True] >>> map(lambda x: 1 if x else 0, testList) [0, 0, 1, 1] >>> map(int, testList) [0, 0, 1, 1]
или с помощью списка понимания:
>>> testList [False, False, True, True] >>> [int(elem) for elem in testList] [0, 0, 1, 1]
используя numpy, вы можете сделать:
y = x.astype(int)
Если вы используете массив не numpy, вы можете использовать понимание:
y = [int(val) for val in x]