大家好,上周发布的Pandas进阶修炼120题不知道各位做的怎么样,现在NumPy系列也闪亮登场!在上个系列一直让我很遗憾的就是对一些重要的函数没有进一步讲解(当然有读者制作的b站讲解视频填补了这一空缺)。所以在NumPy系列中,为了系统的学习NumPy的各种操作,类似于Pandas120系列的习题肯定少不了,但是还会有一些理论的讲解,我们开始吧!


首先问大家几个问题,NumPy是什么为什么使用NumPyNumPy又好在哪里?接下来我将尽可能的使用人话给大家整明白。

什么是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的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 动画:用动画技巧记忆常见笔试 JS 类型转换
  2. 动画: 快速排序 | 如何求第 K 大元素?
  3. python数据类型的强制转换
  4. PHP 枚举类型的管理与设计
  5. 通过实例解析PHP数据类型转换方法
  6. php八大数据类型有哪些
  7. PHP高性能Excel扩展1.2.8发布,文件读取数据类型可控!

随机推荐

  1. 如何在Android中获知屏幕打开或者关闭
  2. android:gravity ,和 android:layout_grav
  3. Windows下给Android(安卓)app进行系统签
  4. android性能测试systrace
  5. android 备忘
  6. Android异步处理二:使用AsyncTask异步更新
  7. Android学习系列之一
  8. [学习笔记-Android]EditText属性
  9. Android——导入已存在的android工程时出
  10. 基于NDK的Android防破解& Android防破解