在Numpy中存在着通用函数和聚合去对数据进行处理,numpy通过向量进行对数据数组的计算,而这些向量主要依靠一些通用函数,而聚合是numpy对面对大量数据时获取描述性统计信息的方法。通常在通用函数(ufunc)中利用向量实现numpy数据处理速度的提高。
import numpy as np
import math
import time
x=[i*0.001 for i in np.arange(1000000)]
#在python 3.8中已经更新移除了time.clock(),可以改用time.perf_counter()或者time.process_time()
start=time.perf_counter()
for i,t in enumerate(x):
x[i]=math.sin(t)
print("math.sin:",time.perf_counter()-start)
x=[i*0.001 for i in np.arange(1000000)]
x=np.array(x)
start=time.perf_counter()
np.sin(x)
print("numpy.sin:",time.perf_counter()-start)
'''
math.sin: 0.5314168000004429
numpy.sin: 0.0107958000007784
'''
import numpy as np
import time
x1=np.random.rand(1000000)
x2=np.random.rand(1000000)
#使用循环计算向量点积
tic=time.process_time()
dot=0
for i in range(len(x1)):
dot+=x1[i]*x2[i]
toc=time.process_time()
print("dot="+str(dot)+"\nfor loop——Computation time="+str(1000*(toc-tic))+"ms")
#使用numpy函数求向量点积
tic=time.process_time()
dot=0
dot=np.dot(x1,x2)
toc=time.process_time()
print("dot="+str(dot)+"\nverctor version——Computation time="+str(1000*(toc-tic))+"ms")
'''
dot=250169.7881271574
for loop——Computation time=796.875ms
dot=250169.7881271633
verctor version——Computation time=0.0ms
'''
可以看出使用for循环计算耗时明显高于numpy通用函数(ufunc)