如何从 python 中具有多个条件的数组 A 获取布尔数组?
How do I get a boolean array from an array A with multiple conditions in python?
A = np.arange(0,20,1)
A<7
以上代码将 return 一个布尔数组,当 A<7 时其元素为真,否则为假。
如何获得 x < A < 7 的布尔数组?
只需使用列表理解:
x = 3
bools = [i<7 and i> x for i in A]
import timeit
A = np.arange(0, 20, 1)
# print(A)
x = 3
def fun():
return [x < i < 7 for i in A]
def fun2():
return (A < 7) & (A > 3)
def fun3():
return np.logical_and(x < A, A < 7)
def fun4():
return [i < 7 and i > x for i in A]
print('fun()', timeit.timeit('fun()', number=10000, globals=globals()))
print('fun2()', timeit.timeit('fun2()', number=10000, globals=globals()))
print('fun3()', timeit.timeit('fun3()', number=10000, globals=globals()))
print('fun4()', timeit.timeit('fun4()', number=10000, globals=globals()))
输出:
执行时间(秒):
fun() 0.055701432000205386
fun2() 0.016561345997615717
fun3() 0.016588653001235798
fun4() 0.0446821750010713
您可以使用 numpy.logical_and
完成该任务,例如:
import numpy as np
A = np.arange(0,20,1)
B = np.logical_and(3<A,A<7)
print(B)
输出:
[False False False False True True True False False False False False
False False False False False False False False]
如果你的 x = 3,那么:
a = np.arange(0,20,1)
a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
(a>3) & (a<7)
array([False, False, False, False, True, True, True, False, False,
False, False, False, False, False, False, False, False, False,
False, False])
如果您想要一个或条件,您可以将 &
替换为 |
:
(a<3) | (a>7) #Less than 3 or greater than 7
array([ True, True, True, False, False, False, False, False, True,
True, True, True, True, True, True, True, True, True,
True, True])
选择x值然后:
x = 3
np.logical_and(x<A, A<7)
A = np.arange(0,20,1)
A<7
以上代码将 return 一个布尔数组,当 A<7 时其元素为真,否则为假。 如何获得 x < A < 7 的布尔数组?
只需使用列表理解:
x = 3
bools = [i<7 and i> x for i in A]
import timeit
A = np.arange(0, 20, 1)
# print(A)
x = 3
def fun():
return [x < i < 7 for i in A]
def fun2():
return (A < 7) & (A > 3)
def fun3():
return np.logical_and(x < A, A < 7)
def fun4():
return [i < 7 and i > x for i in A]
print('fun()', timeit.timeit('fun()', number=10000, globals=globals()))
print('fun2()', timeit.timeit('fun2()', number=10000, globals=globals()))
print('fun3()', timeit.timeit('fun3()', number=10000, globals=globals()))
print('fun4()', timeit.timeit('fun4()', number=10000, globals=globals()))
输出:
执行时间(秒):
fun() 0.055701432000205386
fun2() 0.016561345997615717
fun3() 0.016588653001235798
fun4() 0.0446821750010713
您可以使用 numpy.logical_and
完成该任务,例如:
import numpy as np
A = np.arange(0,20,1)
B = np.logical_and(3<A,A<7)
print(B)
输出:
[False False False False True True True False False False False False
False False False False False False False False]
如果你的 x = 3,那么:
a = np.arange(0,20,1)
a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
(a>3) & (a<7)
array([False, False, False, False, True, True, True, False, False,
False, False, False, False, False, False, False, False, False,
False, False])
如果您想要一个或条件,您可以将 &
替换为 |
:
(a<3) | (a>7) #Less than 3 or greater than 7
array([ True, True, True, False, False, False, False, False, True,
True, True, True, True, True, True, True, True, True,
True, True])
选择x值然后:
x = 3
np.logical_and(x<A, A<7)