numpy模块中高级统计函数

所谓高级函数,指普通生活中很少使用的,但是在数据高级分析、机器学习、科学研究中所需要使用的一类统计函数。

1)、计算沿指定轴的元素个数的第q个百分位数,求观察值N
函数percentile(a, q, axis=None),a为需要统计的集合对象,q为要计算的百分位数或百分位数序列(q的取值区间为[0,100])。返回q%范围内的观察值

import numpy as np
a1 = np.array([[10,0,9],[8,9,9],[9,10,9]])  #建立二维数组
np.percentile(a1,50,axis=0)

array([9., 9., 9.])
2、一阶差分,计算沿给定轴的n次迭代离散差。
函数diff(a, n=1, axis=-1),a为需要统计的集合对象,n迭代离散差次数,默认值n=1。

沿着指定轴计算第N维的离散差值
参数:
a:输入矩阵
n:可选,代表要执行几次差值
axis:默认是最后一个

a1 = np.array([1,2,4,8,10])
np.diff(a1)   #后一个元素减去前一个元素,生成新的元素

array([1, 2, 4, 2])
3、数组的连续元素之间的差异。
函数ediff1d(ary, to_end=None, to_begin=None),ary为需要统计的集合对象;to_end可选,在返回的差异结束时追加的数字(或集合元素);to_begin,返回差异开头前的数字。

d1 = np.array([1,2,4,8,3])
np.ediff1d(d1)   #只有arr参数 情况下,后一元素减去前一元素产生新元素

array([ 1, 2, 4, -5])

np.ediff1d(d1,to_begin=[0,0],to_end=10)  #增加to_end,to_begin参数情况下

array([ 0, 0, 1, 2, 4, -5, 10])

4、梯度计算
函数gradient(f),f为需要计算的集合对象

g1 = np.array([1,3,5,7,10,15])
np.gradient(g1)         #对一维数组元素进行梯度计算

array([2. , 2. , 2. , 2.5, 4. , 5. ])

g2 = np.arange(9).reshape((3,3))
np.gradient(g2)    #对二维数组的顺序元素进行计算

[array([[3., 3., 3.],
[3., 3., 3.],
[3., 3., 3.]]),
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])]
5、使用复合梯形规则沿给定轴积分

np.trapz([[1,2,3],[4,5,6]],axis=1) #以行为单位进行积分

array([ 4., 10.])
2)、排序
函数sort(a, axis=-1),a为需要统计的集合对象,axis=0以列为单位进行排序,axis=1以行为单位进行排序.

 a1 = np.array([[100,0,45],[12,89,35],[50,40,60]])
np.sort(a1,axis=1)   #按行为单位进行排序

array([[ 0, 45, 100],
[ 12, 35, 89],
[ 40, 50, 60]])

a1.sort(axis=0)             #用数组方法sort()排序,改变原有数组
a1

array([[ 12, 0, 35],
[ 50, 40, 45],
[100, 89, 60]])

3)、将数值替换到数组指定位置
1、根据条件和输入值更改数组的元素
函数place(arr, mask, vals),arr为数组对象,mask为符合条件的逻辑表达式,vals为需要插入的标量或集合对象。等价于putmask ()函数的用法和功能。

p1 = np.array([[1,8,10],[2,7,9],[11,23,33]])
np.place(p1,p1>10,[0,1])  #对于数组里元素大于10的依次用
#0,1代替place()的计算结果直接改变了数组p1的元素值,而非产生临时新数组
p1

array([[ 1, 8, 10],
[ 2, 7, 9],
[ 0, 1, 0]])

2、用给定值替换数组的指定元素.
函数put(a, ind, v, mode=‘raise’),a为需要替换的数组对象,ind为替换顺序下标位置,v为提供可以替换数值的集合对象

p2 = np.ones(9).reshape((3,3))
np.put(p2,[3,4,5],0)   #ind为p2的顺序下标3,4,5,替换值0
p2

array([[1., 1., 1.],
[0., 0., 0.],
[1., 1., 1.]])
3、通过指定axis和花式索引将值放入目标数组.
函数put_along_axis(arr, indices, values, axis),arr为需要替换的数组对象,indices花式索引(见3.3.3节)确定需要替换的下标范围,values为提供的可以替换的数值或集合。上述四个参数为必选项。

p3 = np.ones(9).reshape((3,3))
np.put_along_axis(p3,np.array([[1],[1],[1]]),0,axis=1)
p3

array([[1., 0., 1.],
[1., 0., 1.],
[1., 0., 1.]])

4、填充任何维度的给定数组的主对角线.
函数fill_diagonal(a, val, wrap=False),a至少是2维数组,val为主对角线上需要填写的数值。

z1 = np.zeros(9).reshape((3,3))
np.fill_diagonal(z1,5)
z1

array([[5., 0., 0.],
[0., 5., 0.],
[0., 0., 5.]])

4)、增加和删​​除行(列)
**1、删除数组行(列)元素
函数delete(arr, obj, axis=None),arr为数组对象,obj为下标切片、下标标量、下标列表、下标整数数组,axis=None默认值,删除后的新数组为一维数组,在axis=1的情况下,保留元素按照行方向形成新数组;在axis=0的情况下,保留元素按照列方向形成新数组。
(1)下标切片删除

d = np.arange(9).reshape((3,3))
np.delete(d,np.s_[:2],axis=1)  #在行方法上,删除d数组的1,2列

array([[2],
[5],
[8]])

d = np.arange(9).reshape((3,3))
np.delete(d,np.s_[:2],axis=0)  #在列方向上,删除d数组的1,2行

array([[6, 7, 8]])
(2)指定下标数删除
在这里插入图片描述
(3)指定下标数组删除
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/changshupx/article/details/108533043