python使用过滤器计算iterable中的元素
要对列表中的元素进行计数,可以使用,但如果只需要对某些元素进行计数,该怎么办 我已经设置了这个示例(请注意:numpy只是为了方便起见。通常,该列表将包含任意python对象):python使用过滤器计算iterable中的元素,python,iterator,iterable,python-collections,Python,Iterator,Iterable,Python Collections,要对列表中的元素进行计数,可以使用,但如果只需要对某些元素进行计数,该怎么办 我已经设置了这个示例(请注意:numpy只是为了方便起见。通常,该列表将包含任意python对象): 我想计算一个数字在这个列表中出现的频率,但我只对数字感兴趣如果这是关于大型numpy数组,那么最好利用矢量化numpy操作 %%time np.unique(numbers[numbers <= 10], return_counts=True) 相比之下,我自己对您的代码计时的次数要比您的略高。如果这是关于大
我想计算一个数字在这个列表中出现的频率,但我只对数字感兴趣如果这是关于大型numpy数组,那么最好利用矢量化numpy操作
%%time
np.unique(numbers[numbers <= 10], return_counts=True)
相比之下,我自己对您的代码计时的次数要比您的略高。如果这是关于大型numpy阵列,您最好利用矢量化numpy操作
%%time
np.unique(numbers[numbers <= 10], return_counts=True)
相比之下,我自己对您的代码计时的次数比您的略高。我知道unique,但这与numpy阵列无关。randint函数对于建立一个示例非常方便。非常好的主意:)我知道unique,但这不是numpy阵列。randint函数对于建立一个示例非常方便。不过这主意不错:)
%%time
numbers = [number for number in numbers if number<=10]
counter = Counter(numbers)
CPU times: user 1.3 s, sys: 22.1 ms, total: 1.32 s
Wall time: 1.33 s
%%time
counter = defaultdict(int)
for number in numbers:
if number > 10:
continue
counter[number]+=1
CPU times: user 1.99 s, sys: 11.5 ms, total: 2 s
Wall time: 2.01 s
%%time
iterator = (number for number in numbers if number <= 10)
counter = Counter(iterator)
CPU times: user 1.38 s, sys: 8.51 ms, total: 1.39 s
Wall time: 1.39 s
%%time
np.unique(numbers[numbers <= 10], return_counts=True)
Wall time: 31.2 ms
(array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
array([10055, 10090, 9941, 10002, 9994, 9989, 10070, 9859, 10038,
10028, 9965], dtype=int64))