Как преобразовать булевой массив в массив 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, или мне нужно использовать цикл?
Ответы
Ответ 1
Массивы Numpy имеют метод astype
. Просто сделайте y.astype(int)
.
Обратите внимание, что это даже не нужно делать, в зависимости от того, для чего вы используете массив. В большинстве случаев Bool будет автоматически преобразован в int, поэтому вы можете добавить его в массивы int без необходимости его явного преобразования:
>>> x
array([ True, False, True], dtype=bool)
>>> x + [1, 2, 3]
array([2, 2, 4])
Ответ 2
Метод 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]
Ответ 3
Используя numpy, вы можете:
y = x.astype(int)
Если вы использовали массив без numpy, вы можете использовать список:
y = [int(val) for val in x]
Ответ 4
В большинстве случаев вам не требуется преобразование:
>>>array([True,True,False,False]) + array([1,2,3,4])
array([2, 3, 3, 4])
Правильный способ сделать это:
yourArray.astype(int)
или
yourArray.astype(float)
Ответ 5
Я знаю, что вы просили решения, не связанные с циклом, но единственные решения, которые могут возникнуть, возможно, внутри внутри всего:
map(int,y)
или
[i*1 for i in y]
или
import numpy
y=numpy.array(y)
y*1
Ответ 6
Забавный способ сделать это
>>> np.array([True, False, False]) + 0
np.array([1, 0, 0])