基础运算
既然 Numpy 是一个科学计算的模块,那么必定最牛逼的就是它的计算能力和多样的计算功能。 对于一个 Python 中数学运算的怪兽,Numpy 合理运用了 C 语言的能力,将 Python 的易用性和 C 的高效完美结合。
本节囊括的方法:
- 加减乘除
+-*/
np.dot()
- 数据统计分析
np.max() np.min() np.sum() np.prod() np.count()
np.std() np.mean() np.median()
- 特殊运算符号
np.argmax() np.argmin()
np.ceil() np.floor() np.clip()
加减乘除¶
在 Numpy 中进行加减乘除可比 List 有效率多了,为什么这么说?Numpy 可以让在 Array 中的每一个元素都快速计算,甚至有时候还可以帮你自动并行运算。 比如你要为一个列表中的每个元素都加上一个值,比如收集了一批学生的身高,一年后,大家都长高了 3cm。
用列表你需要使用到一个循环,或者是一个map
函数来帮你实现这个功能。
看似 map
也挺试用的,不过一般来说,这个写法还是比较复杂的。如果我们用 Numpy 的方式来实现,怎么搞?
Numpy 是可以批量进行计算的,只需要简单的 +-*/
,就能进行全元素的运算,也就是向量化运算。同理,我们也可以进行其他符号的批量运算。
在科学运算,机器学习中。矩阵运算毋庸置疑十分重要, 我们在之后的小练习中也会着重体验到重要性。 下面我来介绍在机器学习中最常用的矩阵点积运算。
从上面可以看出,你有两种写法。1)直接用一个矩阵 dot 另一个;2)用 np.dot(a, b)
把两个矩阵包起来。 因为 莫烦Python 有很多 AI 的内容,所以我分享的时候,就偏向于往 AI 方向带啦,见谅啦。
当然,矩阵还有很多其他的计算,比如 np.outer()
矩阵外积,np.inner()
矩阵内积 (和 np.dot()
的用法稍稍有些不同,你可以理解成 np.dot(a, b)= np.inner(a, b.T)
, 把 b 做一次转置)。
数据统计分析¶
用 Numpy 做数据分析理所应当,但是如果数据的种类多样的话,我还是比较推荐用 Pandas 来做分析的,后面我们也会进入交互式的 Pandas 教学. 不过,就我个人经验,在数据量比较大的时候,我更喜欢直接 Numpy 来搞,因为 Numpy 的速度还是要比 Pandas 快上不少。
那么什么是数据分析呢?其实也就是在数据中找到你想要的一些变量,总结数据的规律。最简单的当属找到最大值最小值了。 比如上面的身高数据,你想找全班最高和最矮的。
这里也有两种方法可以获取到最大最小,只是不同的写法罢了,你习惯用哪个就用哪个好了。
np.max(a), np.min(a)
a.max(), a.min()
当有一天,你有个躺尸的活动,要计算每个人躺下来头尾相连,有多长,我们怎么算?当然就是累加啦。
还有一个,累乘的计算,这个我不好做比喻,但是你肯定能在生活中找到一些需要累乘的例子的。 我还想一同介绍的是一个计数的函数,这个用来统计总共有多少人。
在统计学中,我们常会有两个概念,均值,中位数。算算你公司的平均工资是多少?不算不知道,一算吓一跳, 我们公司,因为有一个工资很高的人,平均工资是 4.82w,哈哈哈,我也被平均了。 但是这时候,为了更准确看到普通民众的薪资水平,最好还是用中位数(1.2w)更可靠。
在统计数据分布的时候,还有一个值也比较重要,standard deviation 标准差,用来描述正态分布。 这个在机器学习中,特别是深度神经网络中也非常重要,特别用于权重的生成原则。
特殊运算符号¶
还有一些有的没的,时不时会用上的功能,我在这里给大家介绍 4 个,但是除了这 4 个,当你需要更多能力的时候, 建议你直接搜索对应的功能。现在给你看太多,多一段时间,你也很难回忆的起来。
有的时候,其实你不关心 np.max()
或者 np.min()
的数值是多少,而是关心这个数值的序号, 比如还是那个身高的例子,我找到了最高身高,其实我是想对应上人的。用 np.argmax()
和 np.argmin()
就能搞定。
另外一个时不时会用到的功能是,取天花板的值
还是地板的值
,这个在 AI 算法中也比较常见, 比如我要对其做取整处理,抹除小数部分。
那我如果还有更自由的取值截取空间时咋办?我可以用 np.clip()
来做上下界限的值截取。
总结¶
其实 Numpy 中做数据运算的功能,比我这里列举的要多很多,我只是列举了一些我在数据分析和人工智能算法中,经常会使用到的一些功能。 还有更多的功能,可以在他的官方网站查找哦。