integer - python: 将布尔数组转换为int数组

我使用 scilab,我是python的新手, 如果要转换布尔值数组,则为:


>>> 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)

请注意,甚至可能不需要执行此操作,具体取决于您使用数组的内容。在很多情况下,Bool会自动提升为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]

我知道你要求非循环解决方案,但是,唯一可以在内部使用的解决方案可能是 。

 
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)

使用 numpy,你可以执行:

y = x.astype(int)

如果你使用非numpy数组,你可以使用 列表推导 :

y = [int(val) for val in x]

...