如何将一个布尔数组转换为一个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中是否有一个简单的命令,或者我必须使用循环?
Numpy数组有一个astype
方法。 只要做y.astype(int)
。
请注意,甚至可能不需要这样做,具体取决于您使用的arrays。 在许多情况下,Bool将被自动引用为int,因此您可以将其添加到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列表从布尔转换为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]
或者使用列表parsing:
>>> 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]
我知道你问过非循环的解决scheme,但我可以想出的唯一解决scheme可能是内部循环:
map(int,y)
要么:
[i*1 for i in y]
要么:
import numpy y=numpy.array(y) y*1
大多数时候你不需要转换:
>>>array([True,True,False,False]) + array([1,2,3,4]) array([2, 3, 3, 4])
正确的做法是:
yourArray.astype(int)
要么
yourArray.astype(float)