身为一个库,就必然有它封装的函数,这一节我们将学习numpy中的函数。
2.1 数学函数
数学函数比较简单,只需简单的看一下即可,这儿不给例子。
函数名作用参数解读np.sin(x)/np.cos(x)/np.tan(x)正弦/余弦/正切x:一个变量
np.arcsin(x)/np.arccos(x)/np.arctan(x)
反正弦/反余弦/反正切x:一个变量np.degrees(x)弧度转角度x:角度变量np.around(x,decimals=0)四舍五入x:变量,decimals:保留的小数位np.floor(x)向下取整x:一个变量
np.ceil(x)
向上取整x:一个变量np.add(a,b)等同于a+ba,b两个变量np.subtract(a,b)等同于a-ba,b两个变量np.multiply(A,B)矩阵相乘A,B两个矩阵np.divide(a,b)等同于a/ba,b两个变量np.power(x,n)n方运算x的n次方np.mod(a,b)等同于a%ba,b两个变量
2.2 统计函数
从统计函数开始,这些函数就比较重要了,先总结一下函数,后给出例子。
值得一题的是,numpy中 axis参数代表轴,当axis=0时,表示按列做某种操作,当axis=1时,表示按行做某种操作,axis=2,按第三通道………..
也可以如此理解,如果有一个(mnab….)的矩阵,当axis=0,得到(nab)矩阵;当axis=1,得到(mab)的矩阵;当axis=2时,得到(mn*b)的矩阵……
函数名作用参数解读np.amin(ndarray,axis)按axis轴寻找最小值当axis不指定时,返回一个最小值,否则按axis轴找最小值np.amax(ndarray,axis)按axis轴寻找最大值当axis不指定时,返回一个最大值,否则按axis轴找最大值np.ptp(ndarray,axis)返回最大值与最小值得差当axis不指定时,返回一个极差,按axis轴找极差np.median(ndarray,axis)求中位数……………………………………..np.mean(ndarray,axis)求平均数………………………………………np.average(ndarray,axis)求加权平均值………………………………………np.std(ndarray,axis)求标准差公式为:std = sqrt(mean((x – x.mean())2))np.var(ndarray,axis)求方差公式:var=mean((x – x.mean()) 2)
np.max(ndarray,axis)
==np.amax(ndarray,axis)np.min(ndarray,axis)==np.amin(ndarray,axis)
我们可以上个小应用,可以实现这样的一个函数,输入的ndarray数据,求统计上的变量,如可以求【均值,方差,标准差,中位数,最大值,最小值,偏度,峰度】
上代码:
import numpy as np
def deal_data(values, label,axis=None):
"""
计算 【均值,方差,标准差,中位数,最大值,最小值,偏度,峰度】
input:
values : ndarray数据 m*n
label : ['mean', 'var', 'std', 'median', 'max', 'min', 'skewness', 'kurtosis']中的一个
axis : 0 or 1 or None if axis = 0,每列为1个数据,if axis = 1 ,每行为1个数据
return : 计算什么返回什么
"""
labels = ['mean', 'var', 'std', 'median', 'max', 'min', 'skewness', 'kurtosis']
if label not in labels:
raise Exception('label不合理,没有相应的计算方式')
else:
axes = [None,0,1]
if axis not in axes:
raise Exception('axis参数不合理,应为None、0、1')
if label == 'mean':
values = np.mean(values, axis=axis)
elif label == 'var':
values = np.var(values, axis=axis)
elif label == 'std':
values = np.std(values, axis=axis)
elif label == 'median':
values = np.median(values, axis=axis)
elif label == 'max':
values = np.max(values, axis=axis)
elif label == 'min':
values = np.min(values, axis=axis)
elif label == 'skewness':
mean = np.mean(values, axis=axis)
vars = np.var(values, axis=axis)
if axis is not None:
mean = np.expand_dims(mean,axis=axis)
fenzi = np.mean((values - mean) ** 3,axis=axis)
fenmu = vars**1.5
values = fenzi / fenmu
elif label == 'kurtosis':
vars = np.var(values, axis=axis)
mean = np.mean(values, axis=axis)
if axis is not None:
mean = np.expand_dims(mean,axis=axis)
fenzi = np.mean((values - mean) ** 4, axis=axis);
fenmu = vars ** 2;
values = fenzi / fenmu
return values
a = np.array([[10,14,6],[14,20,7],[9,4,23]])
values=deal_data(a,label='kurtosis',axis=0)
2.3 排序
排序有很多方式,评判一个排序,得看其时间复杂度,空间复杂度,稳定性等总结成下表
函数为:np.sort(ndarray, axis, kind, order)
种类(kind)速度稳定性最坏情况
(快速排序)1否O(n^2)
(归并排序)2是O(n*logn)
(堆排序)3否O(n*logn)
其中参数kind:默认为快速排序,order:按什么排序。
相关的排序,获得索引的函数有:
函数名作用np.sort(ndarray, axis, kind, order)升序np.argsort(ndarray,axis)返回升序数组对应的索引(原数组不改变)np.argmax(ndarray,axis)返回axis轴最大值的索引np.argmin(ndarray,axis)返回axis轴最小值的索引np.nonzero(ndarray)返回1个tuple,大小为ndarray.dim,将这些数组每个维度对应可以获得一组坐标,这些坐标就是非0值得索引np.where(条件如ndarray>0)返回ndarray满足条件的索引,如果是多维数组,相当于对每个指针进行操作,会获得1个tuple,大小为ndarray.dim,即满足条件的坐标为(x,y,….)np.extract(条件,ndarray)返回ndarray满足条件的值
上例子:
import numpy as np
a = np.array([[4,0,3],[6,3,0]])
b = np.sort(a,kind='quicksort',axis=0)
print(b)
c = np.argsort(a,axis=0)
d = np.argmax(a,axis=0)
print('c={}\nd={}'.format(c,d))
f,g = np.nonzero(a) #因为a有两个维度,返回大小为2的tuple
#获得非0元素的个数
nonzero_nums = np.size(f)
#用where语句求0元素的个数
nonzero_nums_ = np.size(np.where(a==0)[0])
#extract求a>3的元素
a_lager_3 = np.extract(a>=3,a)
给点小运用
(1).ndarray 按行排序:实现1个这样的行数,它可以根据某一列作为关键字,按行排序
import numpy as np
def sort_rows(arr,col=0):
"""
按行排序,默认按第1列排序
"""
index = np.argsort(arr,axis=0)[:,col]
values = arr[index]
return values
a = np.array([[4,21,23],[1,30,22],[3,1,12]])
b = sort_rows(a,col=0) #按第1列排序
print(b)
(2).大家知道 np.sort是升序操作,那我们可以实现降序的操作。
具体操作是 对1个ndarray对象取符号,后升序获得索引,在引用
import numpy as np
a = np.array([4,21,23,1,30,22,3,1,12])
index = np.argsort(-a)
a_ = a[index]
print(a_)
2.4 矩阵生成
这一部分就是关于对矩阵的创建的一些函数。
函数名作用np.random.seed(n)将随机数分成n个堆,产生固定的随机数顺序np.random.rand(d1,d2,d3…)生成大小为(d1,d2,…),值为0-1均匀分布的随机数np.random.randn(d1,d2,d3…)生成大小为(d1,d2,…),值为0-1正态分布的随机数np.random.randint(low,high,size)生成大小为size(元组),值为[low,high)的随机整数np.random.uniform(low,high,size)生成大小为size(元组),值为[low,high)的随机浮点数np.ones(size)size:元组 ,产生size大小的为1的矩阵np.eyes(m,n)产生m行n列的单位矩阵np.empty(size)size:元组 , 不推荐使用,此函数使用不为空矩阵,有极小的误差!np.linspace(start,stop,num)创建等差数列
Original: https://blog.csdn.net/qq_53694275/article/details/122177603
Author: 山上有多花
Title: numpy(五)函数篇
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/760389/
转载文章受原作者版权保护。转载请注明原作者出处!