这个问题不是另一个问题的重复。另一个问题询问在numpy数组上应用条件语句时的单个布尔输出(
True/False
(。这就是为什么使用np.any()
或np.all()
来明确地确定输出是很重要的。当我们使用表达式
2 < a < 5
评估数组a
是否在2
和5
之间时,我在这里的问题涉及创建布尔True/False
值的逐元素数组输出。这个问题深入探讨了在使用numpy
数组时这种方便表达式的可行性。
Python允许对标量执行以下操作。
a = 7
print(2 < a < 5) # False
a = 4
print(2 < a < 5) # True
然而,如果我对numpy数组进行同样的尝试,它是不起作用的。
import numpy as np
a = np.arange(10)
2 < a < 5
这会产生一个错误。但是,以下两种方法中的任何一种都有效(正如预期的那样(:
np.logical_and(2 < a, a < 5) # method-1
(2 < a) & (a < 5) # method-2
输出:
array([False, False, False, True, True, False, False, False, False,
False])
所以,我的问题是:有没有任何numpy等价物可以让你只写2 < a < 5
并得到上面的输出?
这个怎么样?
import numpy as np
a = np.arange(10)
bools = map(lambda x: 2 < x < 5, a)
bools = np.fromiter(bools, bool)
suba = a[bools]