如何将一个布尔数组转换为一个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)