问题:如何将布尔数组转换为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中是否有一个简单的命令,还是我必须使用循环?
回答 0
numpy数组有一个astype
方法。做吧y.astype(int)
。
请注意,根据您使用数组的目的,甚至可能没有必要执行此操作。在许多情况下,Bool会自动提升为int,因此您可以将其添加到int数组中,而无需显式转换它:
>>> x
array([ True, False, True], dtype=bool)
>>> x + [1, 2, 3]
array([2, 2, 4])
回答 1
该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]
回答 2
回答 3
大多数时候,您不需要转换:
>>>array([True,True,False,False]) + array([1,2,3,4])
array([2, 3, 3, 4])
正确的方法是:
yourArray.astype(int)
要么
yourArray.astype(float)
回答 4
我知道您要求使用非循环解决方案,但无论如何,我能想到的唯一解决方案可能是内部循环的:
map(int,y)
要么:
[i*1 for i in y]
要么:
import numpy
y=numpy.array(y)
y*1
回答 5
一个有趣的方法是
>>> np.array([True, False, False]) + 0
np.array([1, 0, 0])
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。