NumPy进阶修炼|你真的了解NumPy吗
首先问大家几个问题,NumPy是什么?为什么使用NumPy?NumPy又好在哪里?接下来我将尽可能的使用人话给大家整明白。
什么是NumPy
从官方文档来看NumPy是Python的一个用于科学计算的基础包。它提供了多维数组对象和一个用于数组快速运算的混合的程序,包括数学,逻辑,排序、线性代数等操作。说人话就是它能比标准Python序列更快的进行计算
为什么要用NumPy
经常有人拿List和NumPy比,为什么使用NumPy而不是List?List也可以存储数据啊,答案是NumPy处理数据比list要快很多,如果使用List是坐普通列车,那么NumPy就是坐高铁()?坐火箭()。那么下一个问题就来了,为什么NumPy会这么快?因为NumPy使用的是固定类型,想象一下我们有这样一个3*4矩阵
现在我们来通过放大这个5来比较NumPy与List的不同,大家都知道在计算机中都是利用二进制来存储数据,所这个5在计算机中是由8个二进制位组成的字节
而在我们使用NumPy时候,这个5会被转换为包含4个字节的int32类型
但是在Numpy中你可以说这32位太长,然后指定为16位甚至8位都行
现在来看看List,在Python中一个list存储了值,类型等四个对象
而我们的计算机会将这四个信息值都转换为二进制再进行读写
感受到了吗,所以为啥NumPy比List快,因为它使用的内存字节更少所以我们的计算机可以更快速的读取。
并且更为重要的一点是,在我们遍历Numpy对象的每一个元素的时候,我们不需要每次都进行类型检查,原因还是NumPy使用的是固定类型。而在list中,我们可能会有整数、浮点数、字符串等,所以每一次使用都需要检查每个元素的类型。
当然Numpy比list快的另一个原因是Numpy使用的是连续内存分配。想象一下这就是我们的计算机内存,我们可以将信息存储在这些内存中的任何一个中
假如我们有8个内存块存储信息,因为Python列表中的元素类型是任意的,并且可以像图中一样混乱排列,所以List实际上是用指针指向不同的地址,只能通过寻址方式找到下一个元素。而NumPy中的所有元素的类型都是相同的,所以NumPy在存储元素时内存可以连续
而这样做可以更快的进行计算并且也可以有效的利用缓存。
最后,List能做的事比如插入、增加、删除数据NumPy都可以搞定,List不能做的事,NumPy也能搞定,比如我有两个list
a = [1,2,3]
b = [4,5,6]
如果我直接计算a*b,那么list并不会给出我们想要的[1*4,2*5,3*6],而是直接报错,但是NumPy就可以轻松搞定©著作权归作者所有:来自51CTO博客作者mb5fe18e32e4691的原创作品,如需转载,请注明出处,否则将追究法律责任
更多相关文章
随机推荐