0x01 ndarray与list运行时长对比
import random
import numpy as np
import timeit
a = []
for i in range(100000000):
a.append(random.random())
def sum_list():
return sum(a)
def sum_numpy():
b = np.array(a)
return np.sum(b)
time_list = timeit.timeit(sum_list, number=1)
time_numpy = timeit.timeit(sum_numpy, number=1)
print("List sum time:", time_list)
print("Numpy sum time:", time_numpy)
List sum time: 6.816154757
Numpy sum time: 4.999972694
0x02 ndarray的优势
(1)ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快。这是因为ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndaray在存储元素时内存可以连续,而python原生list就只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Pvthon原生list简单的多。
(2)ndarray支持并行化运算 (向量化运算):numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算。
(3)效率远高于纯Python代码:Numpy底层使用C语言编写,内部解除了GIL (全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯python代码。
发表评论