使用条件列表理解获取索引
Getting indices using conditional list comprehension
我有以下 np.array:
my_array=np.array([False, False, False, True, True, True, False, True, False, False, False, False, True])
如何使用与 True 元素对应的索引的列表理解来创建列表。在这种情况下,我正在寻找的输出将是 [3,4,5,7,12]
我试过以下方法:
cols = [index if feature_condition==True for index, feature_condition in enumerate(my_array)]
但是不工作
为什么要特别列出一个列表理解?
>>> np.where(my_array==True)
(array([ 3, 4, 5, 7, 12]),)
这样可以完成工作并且速度更快。列表解决方案是:
>>> [index for index, feature_condition in enumerate(my_array) if feature_condition == True]
[3, 4, 5, 7, 12]
接受的答案解释了顺序的混乱:if/else in a list comprehension
我很好奇其中的区别:
def np_time(array):
np.where(my_array==True)
def list_time(array):
[index for index, feature_condition in enumerate(my_array) if feature_condition == True]
timeit.timeit(lambda: list_time(my_array),number = 1000)
0.007574789000500459
timeit.timeit(lambda: np_time(my_array),number = 1000)
0.0010812399996211752
if顺序不对,应该在最后-
$more numpy_1.py
import numpy as np
my_array=np.array([False, False, False, True, True, True, False, True, False, False, False, False, True])
print (my_array)
cols = [index for index, feature_condition in enumerate(my_array) if feature_condition]
print (cols)
$python numpy_1.py
[False False False True True True False True False False False False
True]
[3, 4, 5, 7, 12]
我有以下 np.array:
my_array=np.array([False, False, False, True, True, True, False, True, False, False, False, False, True])
如何使用与 True 元素对应的索引的列表理解来创建列表。在这种情况下,我正在寻找的输出将是 [3,4,5,7,12]
我试过以下方法:
cols = [index if feature_condition==True for index, feature_condition in enumerate(my_array)]
但是不工作
为什么要特别列出一个列表理解?
>>> np.where(my_array==True)
(array([ 3, 4, 5, 7, 12]),)
这样可以完成工作并且速度更快。列表解决方案是:
>>> [index for index, feature_condition in enumerate(my_array) if feature_condition == True]
[3, 4, 5, 7, 12]
接受的答案解释了顺序的混乱:if/else in a list comprehension
我很好奇其中的区别:
def np_time(array):
np.where(my_array==True)
def list_time(array):
[index for index, feature_condition in enumerate(my_array) if feature_condition == True]
timeit.timeit(lambda: list_time(my_array),number = 1000)
0.007574789000500459
timeit.timeit(lambda: np_time(my_array),number = 1000)
0.0010812399996211752
if顺序不对,应该在最后-
$more numpy_1.py
import numpy as np
my_array=np.array([False, False, False, True, True, True, False, True, False, False, False, False, True])
print (my_array)
cols = [index for index, feature_condition in enumerate(my_array) if feature_condition]
print (cols)
$python numpy_1.py
[False False False True True True False True False False False False
True]
[3, 4, 5, 7, 12]