如何将一个布尔数组转换为一个int数组

179 人关注

我使用Scilab,想把一个布尔运算的数组转换成一个整数数组。

>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
array([False, False,  True,  True], dtype=bool)

在Scilab中,我可以使用。

>>> bool2s(y)
0.    0.    1.    1.  

or even just multiply it by 1:

0. 0. 1. 1.

在Python中是否有一个简单的命令,或者我必须使用一个循环?

3 个评论
你是在问如何在没有scipy、numpy之类的情况下将布尔数组转换为整数?
有一种单独的格式化代码的方法。你不需要使用blockquote。它是通过缩进来完成的,问题编辑器上面的大括号按钮将为你做这件事。看看吧。
Sukrit,我不在乎我是否必须使用scipy、numpy或任何其他python模块包。
python
integer
boolean
type-conversion
scilab
Kwolf
Kwolf
发布于 2013-07-07
6 个回答
BrenBarn
BrenBarn
发布于 2013-07-07
已采纳
0 人赞同

Numpy数组有一个 astype 方法。 只要做 y.astype(int)

请注意,可能根本没有必要这样做,这取决于你使用数组的目的。 在许多情况下,Bool会被自动提示为int,所以你可以把它添加到int数组中,而不必明确地进行转换。

array([ True, False, True], dtype=bool) >>> x + [1, 2, 3] array([2, 2, 4])
是的,我也可以输入x*1......而且它做的事情和scilab一样....*觉得自己现在像个傻子*。谢谢大家的帮助!....,虽然答案就在我的问题中,但我真的很喜欢得到各种答案,看到所有不同的方法。 真的让我对Python有了新的认识。
关于布尔数组被自动促进:不幸的是,numpy与此不一致。试着将两个布尔数组相减,你会得到一个TypeError和一个deprecation消息。
Sukrit Kalra
Sukrit Kalra
发布于 2013-07-07
0 人赞同

The 1*y method works in Numpy too:

>>> import numpy as np
>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
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]

Or using list comprehensions:

>>> testList
[False, False, True, True]
>>> [int(elem) for elem in testList]
[0, 0, 1, 1]
    
所以, y = 1 if x else 0 y = 1 if x>0 else 0 相同,与 if x: y = 1 ""NEXT LINE"" else: y = 0 相同....,你是怎么学会这些技巧的,我在《中国文化》中没有看到。 如果声明 文件?
不对。 y=1 if x else 0 y=1 if x>0 else 0 不一样,因为后者不考虑负数。这只是Python定义的 True False ,这些都在文档中。
y.astype(int) is 2.5x faster than 1*y or 0+y . perfpy.com/160
cjm
cjm
发布于 2013-07-07
0 人赞同

使用numpy,你可以做到。

y = x.astype(int)

如果你使用的是一个非numpy数组,你可以使用一个list comprehension:

y = [int(val) for val in x]
    
Gioelelm
Gioelelm
发布于 2013-07-07
0 人赞同

Most of the time you don't need conversion:

>>>array([True,True,False,False]) + array([1,2,3,4])
array([2, 3, 3, 4])

正确的方法是。

yourArray.astype(int)
yourArray.astype(float)
    
Tomas G.
Tomas G.
发布于 2013-07-07
0 人赞同

一个有趣的方法是

>>> np.array([True, False, False]) + 0 
np.array([1, 0, 0])
    
bsoist
bsoist
发布于 2013-07-07
0 人赞同

我知道你要的是不循环的解决方案,但我能想到的唯一的解决方案可能反正是内部循环。

map(int,y)
[i*1 for i in y]