乐于分享
好东西不私藏

NumPy 完整学习路线和精华 PDF 下载

NumPy 完整学习路线和精华 PDF 下载
Python与算法社区
已原创 452篇,干货满满
三步加星标

01

02

03

三步加星标

你好,我是 zhenguo

2020年年终,是时候把我写过的最好的作品呈现给你了,在接下来这几天我会陆续发送出来。

最近两天已经推送:

1.  一本20+页的精品PDF,全部个人原创,21 个Pandas 使用小技巧:

我原创的 Pandas 数据分析 21 个使用小技巧

2.  过去原创的 10 个 Python 可视化图,源码全部开放下载:

我原创的 10 个 Python 可视化作品,今天源码全部开放下载!

3.  过去半年沉淀下来的:《20个Python专题》,我原创的 140 页《20 个Python专题》,都是干货,现在开放下载

4.  今天是NumPy精华学习资料合辑,这包括:

  • 1本图解NumPy小册子PDF

  • NumPy中文学习网站

  • 我对NumPy向量化、广播、闪电数值计算速度的总结

  • 推荐一个纯NumPy实现常见的machine learning算法库

  • 1本100页NumPy精华PDF

  • NumPy练习100题原版PDF

文末提供下载方法

1 图解NumPy

NumPy,太通用了,Pandas,SciPy,Tensorflow,scikit-learn 都选它为基础框架,所以Python生态里,掌握NumPy几乎是必须的。

NumPy处理数据,书写精简,能方便地对数据进行切片,切块,多维向量操作。
一般常见的数据类型有四种,以excel或csv为代表的二维数组型表格,还有以单通道或多通道的图像cv文件,还有一维数组格式的音频文件,最后以输入文本为代表的nlp
这些不同种类的输入数据格式,都能通过NumPy方便的表示和处理。正因如此,进一步强化了NumPy的王者地位。
就拿32乘32像素的黑白图片而言,只需一行代码便提取出左上角的10个像素块:
In [11]: a=np.random.randint(0,255,size=(32,32))                                
# 提取左上角的10*10的像素块
In [14]: a[:10,:10]                                                             
Out[14]: 
array([[115168,  94,  97208249,  94,  11194185],
       [ 77130203188243207229213170,  52],
       [250,  98,   7234,  69188152,  66210159],
       [228252122126,  36126210176,  60136],
       [103,  26,  98,  57,  56206221,   9165,  90],
       [ 47188,  55,  92169,   4150200105,  84],
       [241,  36161,   3,  57198216,  26,  33,  13],
       [ 34,  65175213,  52159,   7102102133],
       [214192,  38252,  12,  71,  38,  44165135],
       [234105130189162247,  58,  80,  88,  83]])

接下来,看看NumPy的基础用法。
要想快速掌握NumPy,要理解一些基本原理,如应用最广泛的reshape方法,通过它能将一维数组转为多维,反之亦然。表象为多维,实质在内存中始终为一维。
结合图形可视化,加速理解NumPy中的这些基本运算,如两个一维数组相加的可视化:

再有,NumPy的重要机制之一:广播,可能有些读者对其有些迷惑,不知何为广播,借助可视化图,一看便知:

1个1.6,被广播为2个1.6,原因是要与前面的数组长度匹配上,然后逐元素相加。
除了数组对象之外,NumPy又封装一个矩阵对象,它能提供线代中的点乘操作,这是机器学习公式运算所需要的,点乘的可视化图形为:

点乘实际上等价于:

其他剩余操作,如按块索引、常见聚合操作,也有对应的可视化图。

2 NumPy 中文网站

记住NumPy中文网站:https://www.numpy.org.cn/,里面包括NumPy 的官档中文版,使用入门,实战等。

里面包括NumPy官档最详细的一个中文翻译,地址为:

https://www.numpy.org.cn/reference/
平时遇到关于NumPy的bug,解决不了的,可以先去这里查看API的使用说明。
3 理解 NumPy 向量化和广播

理解NumPy的向量化能力,这正是赋予它简洁的重要原因之一。使用Python原生API会经常写些for,但是NumPy让它变得不再需要,NumPy一切都是按照向量计算。如下计算小于3的元素置0,否则置为1:

# 使用Python原生
a = [10,4,-6,3,5,1]
# 小于3的元素置为0,不小于3的元素置为1
b = []
for i in a:
    b.append(0 if i < 3 else 1)
print(b)

使用 NumPy 的where方法,语法更加简洁,看不到for语句,符合Python哲学:

# 使用NumPy
na = np.array(a)
# 一行代码
b = np.where(na < 301)
print(b)
处理多维数组,NumPy的索引和切片更强大,如下 na < 3 得到布尔索引,一切都按照向量化操作:
na = np.array([10,4,-6,3,5,1])
na[na < 3]
# 结果如下:
# array([-6,  1])
# 创建二维数组
np.random.randint(1,10,size=(3,4))
c2 = np.random.randint(1,10,size=(3,4))
c2
array([[3299],
       [9524],
       [8124]])
# 更强大简洁的切片功能:
c2[:2,1:3]
array([[29],
       [52]])
学习NumPy,不可能不与广播打交道,广播机制必须要理解,关于它的规则可参考:
https://www.numpy.org.cn/article/basics/python_numpy_tutorial.html#%E5%B9%BF%E6%92%AD-broadcasting
4 纯NumPy实现machine learning算法
NumPy往往是数据分析、机器学习、深度学习相关框架的底层框架,NumPy在这方面的实战,都有哪些呢?
在这里推荐一个纯NumPy实现各种常见机器学习、深度学习算法的github库,地址为:
https://github.com/ddbourgin/numpy-ml

5 NumPy数值计算速度强劲

一起重温NumPy中一些有趣且重要的特性。NumPy 最核心的一个对象:ndarray,封装的多维数组,除了存储数据本身外,还会记录元素类型即 dtype,且每个元素占用内存大小都均匀相等,如下创建 8 个 int64 型整数,计算总字节数的方法:
import numpy as np

a = np.arange(8).reshape(2,4)
a
array([[0123],
       [4567]])

# 计算占用占用的字节数
a.size * a.itemsize
64

数据分析工作,NumPy二维数组用的多;数据挖掘的话,高维数组用的就会更多,NumPy的强项正在于此,正所谓Python没有的NumPy有,Python有的NumPy更强。如下,创建同样shape的随机数组,Python要比NumPy慢232倍:

In[5]: %timeit np.random.randint(1,1000,(100,1000))
332 µs ± 2.39 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
]


In[6]: import random

In[6]: %timeit [random.randint(1,100for _ in range(100for _ in range(1000)] 
77.2 ms ± 315 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

# 创建同样的(100,1000)的随机数组
# Python原生是NumPy计算耗时的232倍
In[7]: 77.2 * 1000 / 332 
232.53012048192772

NumPy 闪电处理速度,主要得益于操作直接发生在元素级,而 Python 会创建更多其他额外对象,数据处理性能上无法与NumPy相媲美。

正无穷在NumPy中是 np.inf,空值是 np.nan ,它们都是一个类对象。

更多知识,比如数据类型 int63, float32,...,astype类型转化,reshape函数,数组扁平操作ravel, flatten,切片和索引,按照向量的加减乘除,统计函数,等等

这个阶段可以选择《NumPy 100页精华》PDF,现在送给你

6 NumPy练习100题原版

NumPy 练习 100 题,作者是 rougier,是计算神经科学领域的研究员,在开源的这100道练习题中,循着使用NumPy的逻辑展开,第一题是关于如何导入 NumPy,一直最后讲到使用NumPy的高级方法,如logical_and,diff 等

下载以上资料的方法:

1. 长按下方二维码,关注我的视频号;
2. 关注后,在视频号内私信我,并备注:np

×
订阅图标按钮