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([[115, 168,  94,  97, 208, 249,  94,  11, 194, 185],
       [ 77, 130, 203, 188, 243, 207, 229, 213, 170,  52],
       [250,  98,   7, 234,  69, 188, 152,  66, 210, 159],
       [228, 252, 122, 126,  36, 126, 210, 176,  60, 136],
       [103,  26,  98,  57,  56, 206, 221,   9, 165,  90],
       [ 47, 188,  55,  92, 169,   4, 150, 200, 105,  84],
       [241,  36, 161,   3,  57, 198, 216,  26,  33,  13],
       [ 34,  65, 175, 213,  52, 159,   7, 102, 102, 133],
       [214, 192,  38, 252,  12,  71,  38,  44, 165, 135],
       [234, 105, 130, 189, 162, 247,  58,  80,  88,  83]])

接下来,看看NumPy的基础用法。

要想快速掌握NumPy,要理解一些基本原理,如应用最广泛的reshape方法,通过它能将一维数组转为多维,反之亦然。表象为多维,实质在内存中始终为一维。

结合图形可视化,加速理解NumPy中的这些基本运算,如两个一维数组相加的可视化:

NumPy 完整学习路线和精华 PDF 下载_第1张图片

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

1个1.6,被广播为2个1.6,原因是要与前面的数组长度匹配上,然后逐元素相加。

除了数组对象之外,NumPy又封装一个矩阵对象,它能提供线代中的点乘操作,这是机器学习公式运算所需要的,点乘的可视化图形为:

NumPy 完整学习路线和精华 PDF 下载_第2张图片

点乘实际上等价于:

 

NumPy 完整学习路线和精华 PDF 下载_第3张图片

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

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 < 3, 0, 1)
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([[3, 2, 9, 9],
       [9, 5, 2, 4],
       [8, 1, 2, 4]])
# 更强大简洁的切片功能:
c2[:2,1:3]
array([[2, 9],
       [5, 2]])

学习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([[0, 1, 2, 3],
       [4, 5, 6, 7]])

# 计算占用占用的字节数
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,100) for _ in range(100) for _ 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 等

NumPy 完整学习路线和精华 PDF 下载_第4张图片

NumPy 完整学习路线和精华 PDF 下载_第5张图片

NumPy 完整学习路线和精华 PDF 下载_第6张图片

下载以上资料的方法:

1. 长按下方二维码,关注我的视频号;

2. 关注后,在视频号内私信我,并备注:np

你可能感兴趣的:(python,数据分析,numpy,人工智能,编程语言)