这是 Python 进阶课的第一节 -NumPy,由于内容太多视频时间太长 (3 个多小时),分成上下部。之前基础版的 11 节的目录如下:
编程概览
元素型数据
容器型数据
流程控制:条件-循环-异常处理
函数上:低阶函数
函数下:高阶函数
类和对象:封装-继承-多态-组合
字符串专场:格式化和正则化
解析表达式:简约也简单
生成器和迭代器:简约不简单
装饰器:高端不简单
学习任何东西 (以 NumPy 举例) 先来谈谈我的学习思路,主干线是 WHY-WHAT-HOW-HOW WELL,看这种思路是不是符合你的胃口:
WHY:为什么会有 NumPy?
每一个工具包的创建必是解决痛点。
看下面数组和列表之间的计算效率对比:两个大小都是 1000000,把每个元素翻倍,运行 10 次用 %time 记时。(前者比后者快 20-30 倍)
%%time
lst = list(range(1000000))
for _ in range(10):
my_list = [x * 2 for x in lst]
Wall time: 1.2 s
arr = numpy.arange(1000000)
for _ in range(10):
my_arr = arr * 2
Wall time: 34.9 ms
WHAT
NumPy 数组是一种数据结构。很多资料都从它的表象开始教,比如一维、二维、多维数组长什么样子。但这都不是本质,NumPy 数组的本质是“计算机内存的连续一维段 (1D segment),并与若干个指针一起来在视图中展示高维度”。
听着很绕口,但这样理解数组之后很多问题都可以轻易理解,比如:
我为上面那句话画了三幅图,注意比较数组“想象中的样子”、“打印出的样子”和“内存里的样子”。
看懂之后,你会了解 NumPy 数组其实就是一连串横向的元素,用指针来控制维度 (axis) 和每个维度包含的元素个数 (shape)。
HOW
了解完数组本质之后,就可以把它当做对象(Python 中万物皆对象嘛)把玩了:
怎么创建数组 (不会创建那还学什么)
怎么存载数组 (存为了下次载,载的是上回存)
怎么获取数组 (和索引切片列表相似又不相似)
怎么变形数组 (把数组用不同的样子来展示)
怎么计算数组 (这才是数组的最大用处)
总体内容用思维导图来表示,这也是我经常强调的系统化学东西。有了总体框架,你在接触到繁多的细节时才会把握主干线。
HOW WELL
上面提到了要学好,不仅仅需要你们用心学,也需要我用心教。对于一切难点,我都会将其可视化,这样会大大降低了你们的理解门槛。
比如在讲广播机制时,下面的一图胜千言。
比如在讲数组计算时,用神经网络中一个公式可把重塑 (reshape)、点乘 (dot)、广播 (broadcast) 和元素层面 (element-wise) 几个知识点一次性捋清。
内容肯定是无比干货,就看你们想不想学。付费用户(付 1 赠 1)可以获得: