numpy 常用函数解读:
numpy.loadtxt(filename,delimits=",",unpack=True返回的列是否需要解包,usecols=(返回的列),
dtype=元素类型默认float每一列必须是相同的元素类型,converters={1,int2float函数})
# 读取CSV 文件中的指定行,并进行转换
numpy.c_(a, b, c) # 将数组 a, b, c 分别竖起来,再 水平 拼接起来。
numpy.mat([[...],[...]) # 创建一个矩阵
numpy.diag([...]) # 使用 给定数组 内的值构成矩阵的 主对角线的元素,矩阵的其余元素为 0.
numpy.eye(n) # 生成一个 n行 n列的单位矩阵(主对角线元素为 1 ,其余元素值为 0)
numpy.isnan(array) # 以数组的形式输出array数组中哪些元素是None值的,其结果可以使用过滤器单独获取出来:
numpy.isreal(roots) # 用于输出一个数组roots 数组中只有实部的元素
numpy.isreal(roots).real # 用于获取实部部分
numpy.linespace(start,stop,section) # 把由start开始到stop 止的数据
均匀分为section 个点,即section-1 段长度
numpy.polyfit(fit_x,fit_y,fit_d) # 用于求x 点位集合与对应的y点位集合构成的多项式
numpy.polyder(fit_p) # 用于求多项式各项参数为fit_p 对应的一阶微分后各项的参数
numpy.roots(fit_p) # 用于求多项式各项参数为fit_p 的解
numpy.polyval(fit_p,fit_x) # 用于求多项式各项参数为fit_p的函数,横坐标为fit_x 对应的纵坐标的值
numpy.poly1d([array]) # 输出一个多项式数学表达式,array 为多项式对应项的参数,
后面加参数() 可以求得该参数在该多项式中的解
function.deriv(m=n) # 求function函数的 n 阶微分,返回为微分后的微分方程
function.integ()
numpy.hanning(N) # 用于生成一个N 个数的汉宁窗(卷积核,包含N个参数),返回一个余弦函数序列,
可被作为卷积核数组,提高移动平均线的质量;
numpy.ones(3) # 产生一个所有元素都是1 的数组,参数为元素的个数
numpy.zeros((m,n)) # 生成一个m*n 维的多维数组,元素全部为0
numpy.median(数组) # 求数组的中位数,对样本大小进行按照大小顺序排列,居于中间位置的元素就是中位数。
numpy.max(数组) # 得到数组中最大值
numpy.min(数组) # 得到数组中最小值
numpy.maximum(数组1,数组2) # 得到数组1、数组2中 每个对应元素的最大值,最后形成一个数组返回
numpy.minimum(数组1,数组2) # 得到数组1、数组2中 每个对应元素的最小值,最后形成一个数组返回
numpy.sort(数组) # 将数组中的元素进行排序后返回
numpy.mean(数组) # 求数组中的算数平均数,算数平均值:m = (s1+s2+...+sn)/n
numpy.avrage(数组) # 求数组中的加权平均值,加权平均:a = (s1w1+s2w2+...snwn)/(w1+w2+...+wn)
numpy.var(数组) # 计算数组的总体方差,反应的是每个信号对 平均值的偏离度
numpy.std(数组) # 计算数组的总体标准差
numpy.std(数组,ddof=1) # 计算数组的样本标准差,总体样本和/(N-1) ,ddof 代表自由度,样本偏差时 应取值为 1
**注意:**
如是总体,标准差公式根号内除以n,
如是样本,标准差公式根号内除以(n-1),
numpy.diff(数组) # 执行的后一个元素减去前一个元素,返回一个数组,数组个数为 数组.size-1 ,即比数组元素个数少一个
numpy.convolve(被卷积的数组,卷积核,"valid") # 将被卷积数组按照卷积核进行卷积运算,valid 表示有效的区间,不计算伪值.
(注意,使用的时候需要将卷积核进行反转,即卷积核[::-1],才是需要的结果)
numpy.split(array,3) # 将数组array 内部元素等分成3等分,等分的前提是数组array能刚好被等分才可。
numpy.apply_along_axis(func,axis,array,*arg,**arg) # func自己写的处理函数,
axis函数func对array是作用于行0还是列1,array被作用的数组,*arg,**arg函数func需要传递的参数。
numpy.savetxt(filename,array,delimiter=",",fmt="%g") # 保存文件,文件名filename,文件内容array,分隔符",",
格式紧缩格式不显示小数最后面的0如:1.2000 显示为1.2
numpy.linalg.lstsq(a,b) # 使用numpy中的linalg线性代数模块中的lstsq 最小二乘法(least square) 计算数组b 的预测值
numpy.linalg.eigvals(A) # 求的矩阵 A 的特征值,结果为一个数组
numpy.linalg.eig(A) # 求矩阵A 的特征值和特征向量集合,返回一个元组,第一个值为特征值 构成的数组,
第二个值为一个矩阵 :每一 列 为一个特征向量
U,s,V = numpy.linalg.svd(M,full_matrices=False)
# numpy.linalg.svd(M) 求矩阵 M 的奇异值s 是奇异值矩阵的主对角元素值。
可以使用 numpy.diag(s) 得到奇异值矩阵
numpy.linalg.pinv(矩阵) # 返回值为输入矩阵(可以是方阵、非方阵)的 逆矩阵
numpy.linalg.det(矩阵) # 返回为以矩阵为 行列式的 值
numpy.random.binomial(n, p, size) # 每轮包含n 次尝试,每次尝试的成功率为 p ,共尝试 size 轮 的统计结果, 返回值为一个数组。
numpy.random.hypergeometric(ngood, nbad, nsample, size)
ngood : 好样本个数,抽中值为 1
nbad : 坏样本个数,抽中值为 0
nsample : 每次抽取所有样本中的 n 个样本数
size : 重复抽取 次数(有放回的抽取)
numpy.random.normal(size)
size : 产生size 个随机数,服从标准正态分布
ndarray对象的方法:
1. ndarray.clip()
返回一个被修剪过的数组,原数组中所有比最大值大的元素都被设定为最大设定值,比最小值小的元素都设定为最小设定值。
即超过设定为最大值,低于设为最小值。
如:
b = a.clip(1,255) # 将a数组中所有比1小的都设定为1,比255大的都设定为255,注意a 本身没有改变,
# 只是返回一个新的数组,数组的元素个数和 a 数组元素个数一样
2. ndarray.compress() # 返回一个根据给定条件的筛选田间筛选后的数组。
注意:compress() 针对的是一维数组,多维数组需平坦化(转换为一维数组)后进行压缩。
如:
e = a.compress(a.ravel() > 3).reshape((3,3))
以上意思:将 a 数组平坦后比较比3大的留下,最后再将留下的数组转换为3行3列二维数组。
3. ndarray.prod()/cumprod() # 计算数组元素的累乘,所有元素全部乘到一起,直接返回累乘后的结果。
cumprod() 返回的是累乘的每一步结果组成的数组。
如:
a = [1 2 3 4 5]
a.prod() ---> 120
a.cumprod() ---> [1 2 6 24 120]
4. numpy.cov(a,b) 返回协方差矩阵的分子部分
cov(a,a) cov(a,b)
cov(b,a) cov(b,b)
5. numpy.corrcoef(a,b) 返回相关矩阵(包含分子、分母),计算两个数组的相关性
多项式拟合函数:
numpy.polyfit(x_set,y_set,degree)
x_set : 使用横坐标点的集合
y_set : 横坐标对应的纵坐标点的集合
degree : 式的拟合多项次数,即最高degree 次幂进行拟合
返回值 :对应该输入数据拟合的各项参数 组成的数组
numpy.polyval(fit_p,x_set)
fit_p : 使用numpy.polyfit() 拟合后多项式的各项参数
x_set : 需要计算的横坐标集合
返回值 :根据多项式各项参数,结合x_set 横坐标得到计算后该横坐标对应的计算出的纵坐标的值。
numpy.polyder(numpy.polyfit(x_set,y_set,degree))
参数 : 为多项式各项的参数
返回值 : 返回多项式的一阶微分后各项参数
numpy.roots(numpy.polyder(fit_p))
求方程的根,即求得该多项式方程的解。
参数:方程的各项对应的参数
返回值:返回多项式方程的根,以上意思为:求多项式函数的波峰与波谷的点,即对应的斜率为0 的点。
符号数组:
numpy.sign(array) : 返回输入参数数组中每个元素的符号(-1/0/1)
如:
a = [10 -21 -32 234 23 0 -33]
numpy.sign(a) --> [1 -1 -1 1 1 0 -1]
numpy.piecewise(array,[条件1,条件2,条件3],[对应条件1的值,对应条件2的值,对应条件3的值])
可达到与numpy.sign(array) 同样的效果
矢量化:
将一个针对单个数值的处理函数变成 针对数组处理的函数。
numpy.vectorize() 函数可以将一个针对单个数值处理的函数,变成针对数组的处理函数。
如:
def func(a,b,c):
return a+b+c
A = numpy.arange(1,101)
B = numpy.arange(101,201)
C = numpy.arange(201,301)
使用python的方法对数组A,B,C对应元素进行相加的程序如下:
D = numpy.zeros(A.size)
for i,(a,b,c) in enumerate(zip(A,B,C)):
D[i] = func(a,b,c)
使用numpy里面的标量函数变成矢量函数,numpy.vectorize()方法如下:
D = numpy.vectorize(func)(A,B,C)
矩阵和通用函数:
矩阵:numpy.matrix() 继承自numpy.ndarray
创建矩阵:
numpy.matrix([1 2 3]...) # 使用matrix类创建一个对象
numpy.mat([[...],[...],[...]]) # 使用mat()函数创建矩阵
numpy.matrix(矩阵)创建的矩阵会对原矩阵进行拷贝,可以通过copy参数选择是否对元数据进行复制。
numpy.mat 不用于 numpy.matrix 之处在于其只能获取已有矩阵视图,而无法得到拷贝。
而使用numpy.mat()创建的矩阵对原矩阵进行创建一个视图或引用。
即 numpy.mat() 等价于 numpy.matrix(,copy=False)
矩阵的方法:
matrix.T : 矩阵的转置
matrix.I : 矩阵的逆矩阵
块矩阵:
将一个小矩阵当作一个元素 填入
numpy.bmat("one two;three four")
矩阵相乘:
两个矩阵相乘,其结果为对应元素相乘;与数组相乘不同;
矩阵的通用函数:
把对单个数据进行处理的函数,变为能对数组进行处理的函数
即,提供函数输入的参数为两个单个标量,当使用矢量做输入时,输出也为矢量
numpy.frompyfunc(func,nin,nout)
func : 能对单个数据进行处理的函数
nin : func函数输入传参的个数
nout : func函数返回值的个数
实现加减法的通用函数:
numpy.add.reduce(array) : 数组内元素的 累加
numpy.add.accumulate(array) : 数组内元素的 累加过程组成一个数组返回
numpy.add.reduceat(array,[0,2,4]) : 分段累加,下标0-2之前的累加为第一个结果,下标2-4之间的累加为第二个结果
numpy.add.outer(array_a,array_b) : 求数组的外和,结果为a 行b 列。
三角函数:
numpy.sin()
numpy.cos()
...
位运算:
^ : 按位异或,相同为0,不同为1,用于快速判断两个数是否同为正负
& : 按位与,同为1为1,用于快速求n是否为2 的整数次幂,n & n-1 其结果为 0
线性代数模块:linalg : linear algebra
1. 矩阵求逆:inv
numpy.linalg.inv(matrix)
2. 矩阵求解方程组:
未知方程系数项A,常数项 b 求未知数矩阵 x
x = numpy.linalg.solve(A,b)
A * x = b
注意:
矩阵运算A * x 不可写成 x * A
3. 矩阵的特征值 和 特征向量:
numpy.linalg.eigvals(A)
参数:要求特征值的矩阵 A
返回值: 由特征值构成的一个一维数组,每一个元素都是一个特征值。
numpy.linalg.eig(A)
参数:要求特征值和特征向量的 矩阵 A
返回值:返回一个元组,元组的第一个元素为数组,元素为特征值 集合
元组的第二个元素:为一个矩阵,元素为特征向量为 列 构成的一个矩阵。
对于 n 阶方阵 A,如果存在数 a 和非零n 维向量 x ,使得
Ax = ax成立,则称a 是矩阵 A 的一个特真值,x 是矩阵 A 属于特征值 a 的特征向量。
A的特征向量 :x1,x2,...xn
A的特征值: a1,a2,...an
Axi = aixi, i=1,2,3,...k
使用numpy提供的函数求解矩阵的特征值和特征向量:
求A的特征值: eigvals = numpy.linalg.eigvals(A)
求A的特征值和特征向量:
eigvals, eigvacs = numpy.linalg.eig(A)
返回结果为两个数组,第一个数组:特征值 构成的一维数组
第二个数组:是由特征向量构成的数组,
特征向量为数组的 每一列 构成,
即eigvec = eigvecs[:,i] 所有行的第 i 列为一个特征向量。