利用Python进行数据分析之Numpy学习笔记(三)

NumPy

本篇文章主要讲解NumPy的科学计算函数,虽然在写这篇文章的时候还是感觉这篇文章要比前两篇文章要好些一点,但是,NumPy的这些函数才是更加重要的,做数据分析不是创建ndarray,而是操作ndarray进行计算,获取更深层的数据。所有的函数并没有进行详细解释,需要用到直接在IPython中输入+“?”查看。

通用函数(Universal Functions)是一种对数据执行元素级运算的函数。

一元ufunc

函数 说明
abs、fabs 计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs
sqrt 计算各元素的平方根。相当于arr**0.5
square 计算各元素的平方。相当于arr**2
exp 计算各元素的指数$e^x$(这里简书居然不支持e的x次方)
log、log10、log2、log1p 分别为自然对数(底数为e)、底数为10的log、底数为2的log、底数为(1+x)
sign 计算各元素的正负号:1(正数)、0(零)、-1(负数)
ceil 计算各元素的ceiling值,即大于等于该值的最小整数
floor 计算各元素的floor值,即小于等于该值的最大整数
rint 将各元素值四舍五入到最接近的整数,保留dtype
modf 将数组的小数和整数部分以两个独立的数组的形式返回
isnan 返回一个表示“那些是NaN”的布尔型数组
isfinite、isinf 分别返回一个表示“哪些元素是有穷的(非inf,非NaN)”或“那些数据是无穷的”布尔型数组
cos、cosh、sin、sinh、tan、tanh 普通型和双曲线型三角函数
arccos、arccosh、arcsin、arcsinh、arctan、arctanh 反三角函数
logical_not 计算个元素not x的真值。相当于-arr

二元ufunc

函数 说明
add 将数组中对应的元素相加
subtract 从第一个数组中减去第二个数组中的元素
multiply 数组元素相乘
divide、floor_divide 除法或向下圆整除法(丢弃余数)
power 对第一个数组中的元素A,根据第二个数组中的相应元素B,计算$A^B$
maximun、fmax 元素级的最大值计算。fmax将忽略NaN
mininum、fmin 元素级的最小值计算。fmin将忽略NaN
mod 元素级的求模计算(除法的余数)
copysign 将第二个数组中的值得符号复制给第一个数组中的值
greater、greater_equal、less、less_equal、equal、not_equal 执行元素级的比较运算,最终产生布尔型数组。相当于中缀运算符>、>=、<、<=、==、!=
logical_and、logical_or、logical_xor 执行元素级的真值逻辑运算。相当于中缀运算符&、|、^

基本数据统计

函数 说明
sum 对数组中全部或某轴向的元素求和。零长度的数组的sum为0
mean 算数平均数。零长度的数组的mean为NaN
std、var 分别为标准差和方差,自由度可调(默认为n)
min、max 最大值和最小值
argmin、argmax 分别为最大和最小元素的索引
cumsum 所有元素的累计和,所产生的是一个中间结果的新数组,axis默认为None,此时产生一维的累计和数组,axis为其它值时,产生的数组将和原数组shape相同。
cumprod 所有元素的累计积,同上。

这些方法中布尔值会被强制转换为1(True)和0(False)。

问询函数

any用于测试数组中是否存在一个或多个True,而all则检查数组中是否都是True,主要用于布尔型数组,也可以用于非布尔型数组,所有非0元素将会被当成True。

将条件逻辑表述为数组运算。numpy.where(cond, xarr, yarr)函数是三元表达式x if condition else y的矢量化版本。np.where的第二个和第三个参数不必是数组,他们都可以是标量值。

排序

ndarray的sort是就地排序,而顶级方法np.sort会为原数组创建一个已经排序的副本。

线性代数

numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的函数。他们跟MATLAB和R等语言所使用的是相同的行业标准级Fortran库。

函数 说明
diag 以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)。此函数在np下,并非在np.linalg下
dot 矩阵乘法
trace 计算对角线元素的和
det 计算矩阵行列式
eig 计算方阵的本征值和本征向量
inv 计算方阵的逆
pinv 计算矩阵的Moore-Penrose伪逆
qr 计算QR分解
svd 计算奇异值分解(SVD)
solve 解线性方程组Ax=b,其中A为一个方阵
lstsq 计算Ax=b的最小二乘解

随机数生成

numpy.random模块对python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。

函数 说明
seed 确定随机数生成器的种子
permutation 返回一个序列的随机排列或返回一个随机排列的范围
shuffle 对一个序列就地随机排列
rand 产生均匀分布的样本值
randint 从给定的上下限范围内随机选取整数
randn 产生正态分布(平均值为0,标准差为1)的样本值,类似于MATLAB接口
binomial 产生二项分布的样本值
normal 产生正态(高斯)分布的样本值
beta 产生Beta分布的样本值
chisquare 产生卡方分布的样本值
gamma 产生Gamma分布的样本值
uniform 产生在[0,1)中均匀分布的样本值

官方文档给出的函数概览

Here is a list of some useful NumPy functions and methods names ordered in categories. See Routines for the full list.

推荐阅读更多精彩内容