我使用 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)
。
请注意,甚至可能没有必要这样做,具体取决于您使用数组的目的。在许多情况下,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]
y = 1 if x else 0
与 y = 1 if x>0 else 0
相同,与 if x: y = 1 ""NEXT LINE"" else: y = 0
相同....您是如何学习这些技巧的,我在 if 语句 文档中没有看到它?
y=1 if x else 0
与 y=1 if x>0 else 0
不同,因为后者不考虑负数。这正是 Python 定义为 True
或 False
的内容,这些都在文档中。
使用 numpy,您可以执行以下操作:
y = x.astype(int)
如果您使用的是非 numpy 数组,则可以使用 list comprehension:
y = [int(val) for val in x]
大多数时候你不需要转换:
>>>array([True,True,False,False]) + array([1,2,3,4])
array([2, 3, 3, 4])
正确的做法是:
yourArray.astype(int)
或者
yourArray.astype(float)
一个有趣的方法是
>>> np.array([True, False, False]) + 0
np.array([1, 0, 0])
我知道你要求非循环解决方案,但我能想出的唯一解决方案可能是内部循环:
map(int,y)
或者:
[i*1 for i in y]
或者:
import numpy
y=numpy.array(y)
y*1
不定期副业成功案例分享