Python中,自带列表处理功能,后最近学习算法还有图片处理还有数据库处理过程中,都涉及到np来处理数据问题。
并且理由都是:numpy基于原始c语言编码,速度更快。
但是有多快并没有很直观的案例比较,因此今天我想做一个小的测试,对比一下这两者速度只差。
案例设计如下:
- 对比——python自己生成1亿个随机数 VS numpy生成1亿个随机数 消耗时间;
- 对比——python将这1亿个随机数列求和 VS numpy求和1亿个随机数的求和 消耗时间;
代码如下:
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
import random
import time
import numpy as np
np.random.seed(1234567890)
a=[] #先来个空列表
t0=time.time() #记录初试时间
for i in range(100000000): # 生成1亿随机数并加入列表a
a.append(random.random())
t1=time.time()
c=np.random.rand(1,100000000) # np生成1亿个随机数列表
t2=time.time()
sum1=sum(a) #求和并记录时间
t3=time.time()
b=np.array(a)
t4=time.time()
sum3=np.sum(b) # np求和并记录时间
t5=time.time()
print('py前十',a[:10],b.size,'\nnp前十',c[:10],c.size)
print('\n生成列表py法',t1-t0,
'\n生成列表np法',t2-t1,
'\n自动求和py法',t3-t2,
'\n自动求和np法',t5-t4)
最终输出结果如下:
py前十 [0.7683654739743722, 0.7381577710473923, 0.3513443609071065, 0.12434379432894516, 0.8791934126798406, 0.28150967704486973, 0.6426082374249842, 0.14866248500922585, 0.288348992979241, 0.5910198377256598] 100000000
np前十 [[0.61879477 0.59162363 0.88868359 ... 0.10314204 0.14649676 0.90681355]] 100000000
生成列表py法 22.52289891242981
生成列表np法 1.2723863124847412
自动求和py法 0.4832890033721924
自动求和np法 0.13936996459960938
可以看到,都是1亿个数据,生成列表python跑了20余倍np法;求和时间也是np法的三倍。