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