numpy(五)函数篇

身为一个库,就必然有它封装的函数,这一节我们将学习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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球