Numpy计算数组中满足条件元素个数
- 需求:有一个十分庞大的数组比如1亿个数字,求出里面数字小于5000的数字数目
1.使用随机函数生成1亿个数字
import numpy as np
arr=np.random.randint(1,10000,size=100000000)
arr[:10]
array([9442, 2462, 4737, 888, 7282, 3496, 212, 8930, 7526, 6523])
arr.size
100000000
2.使用python循环求出结果
pyarr=list(arr) # 转换为列表
len([x for x in pyarr if x<5000]) # 列表生成式
49997918
# 消耗时间
%time len([x for x in pyarr if x<5000]) # 列表生成式
Wall time: 34.2 s
49997918
3.使用numpy进行计算
arr[arr<5000].size
49997918
(arr<5000)[:10]
array([False, True, True, True, False, True, True, False, False,
False])
# 消耗时间
%time arr[arr<5000].size
1.49 s ± 39.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
# 两种方法时间对比
34.2/1.24 # 相差近28倍
27.580645161290324