NumPy进阶修炼|你真的了解NumPy吗

讨论 SlowForIt
Lv2 初级炼丹师
发布在 NumPy   1421   1
讨论 SlowForIt   1421   1

    在这个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就可以轻松搞定

    a = np.array([1,2,3])

    b = np.array([4,5,6])

    a * b = array([ 4, 10, 18])

    结束语

    好了,以上就是NumPy进阶修炼|第一期的内容,内容可能比较抽象,但我想这是一名NumPy高手所需要了解的知识。下一期开始就会从代码讲起,所以还等什么,抓紧分享给小伙伴上车学NumPy,没有留言功能的我,分享与在看是对我唯一的鼓励,催更就来点点,至于会更新几期我也不知道,毕竟这次不再仅仅是刷题。拜拜~

    版权声明:作者保留权利,不代表意本站立场。如需转载请联系本站以及作者。

    参与讨论

    回复《 NumPy进阶修炼|你真的了解NumPy吗

    EditorJs 编辑器

    沙发,很寂寞~
    反馈
    to-top--btn