通用函数(元素级)
这边就是一些计算的函数,大家熟悉一下就成,如果用到可以查询相关的文档。
计算x和y中元素级别最大的元素
modf函数,它会返回浮点数数组的小数和整数部分
这边放一些函数表
利用数组进行数据处理
这一部分涉及的内容也比较多,比较重要
NumPy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需要编写循环)。⽤数组表达式代替循环的做法,通常被称为⽮量化。
书上有一个例子,但是为好像不是太理解,这边不影响numpy的学习,所以为就跳过了。
将条件逻辑表述为数组运算
这边其实就一个重要的函数where,注意这是重点
numpy.where函数是三元表达式x if condition else y的⽮量化版
本。
xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
假设我们想要根据cond中的值选取xarr和yarr的值:当cond中的
值为True时,选取xarr的值,否则从yarr中选取。
要想实现这个选择,我们一般会这么写,还是要用到循环
result = [(x if c else y)
for x, y, c in zip(xarr, yarr, cond)]
result
这样一点都体现不出我们numpy的优势,我们要搞矢量化
np.where的第⼆个和第三个参数不必是数组,它们都可以是标量值。在数据分析⼯作中, where通常⽤于根据另⼀个数组⽽产⽣⼀个新的数组。假设有⼀个由随机数据组成的矩阵,你希望将所有正值替换为2,将所有负值替换为-2。若利⽤np.where,则会⾮常简单:
使⽤np.where,可以将标量和数组结合起来。例如,我可⽤常数
2替换arr中所有正的值:
数学和统计⽅法
这⾥, arr.mean(1)是“计算⾏的平均值”, arr.sum(0)是“计算每列
的和”。
累加函数、累乘函数
其他一些统计函数
⽤于布尔型数组的⽅法
在上⾯这些⽅法中,布尔值会被强制转换为1( True)和0( False)。因此, sum经常被⽤来对布尔型数组中的True值计数:
另外还有两个⽅法any和all,它们对布尔型数组⾮常有⽤。 any⽤于测试数组中是否存在⼀个或多个True,⽽all则检查数组中所有值是否都是True:
排序
跟Python内置的列表类型⼀样, NumPy数组也可以通过sort⽅法
就地排序:
这里主要是就地排序和排序副本两种,需要加以区别
唯⼀化以及其它的集合逻辑
这边看代码,其实没什么不好理解的
另⼀个函数np.in1d⽤于测试⼀个数组中的值在另⼀个数组中的成员资格,返回⼀个布尔型数组:
其他相关函数
数组文件的输入输出
save和load,这里很自然,很多文件都是这样的保存和读取
通过savez可以保存多个数组到一个未压缩文件中
线性代数
矩阵乘法
x.dot(y)等价于np.dot(x, y)
@符(类似Python 3.5)也可以⽤作中缀运算符,进⾏矩阵乘
法
x @ np.ones(3)
numpy.linalg中有⼀组标准的矩阵分解运算以及诸如求逆和⾏列式之类的东⻄。它们跟MATLAB和R等语⾔所使⽤的是相同的⾏业标准线性代数库,如BLAS、 LAPACK、 Intel MKL( Math Kernel Library,可能有,取决于你的NumPy版本)
具体的一些函数可以查表
伪随机数生成
比python自带的高级多的随机数
numpy.random模块对Python内置的random进⾏了补充,增加了⼀些⽤于⾼效⽣成多种概率分布的样本值的函数。例如,你可以⽤normal来得到⼀个标准正态分布的4×4样本数组
我们说这些都是伪随机数,是因为它们都是通过算法基于随机数
⽣成器种⼦,在确定性的条件下⽣成的。你可以⽤NumPy的
np.random.seed更改随机数⽣成种⼦
上面的两次生成是一样的
numpy.random的数据⽣成函数使⽤了全局的随机种⼦。要避免全局状态,你可以使⽤numpy.random.RandomState,创建⼀个与其它隔离的随机数⽣成器