numpy(五)函数篇

1.介绍

        身为一个库,就必然有它封装的函数,这一节我们将学习numpy中的函数。

2.函数

 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,按第三通道...........

        也可以如此理解,如果有一个(m*n*a*b....)的矩阵,当axis=0,得到(n*a*b)矩阵;当axis=1,得到(m*a*b)的矩阵;当axis=2时,得到(m*n*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)速度稳定性最坏情况
'quicksort'(快速排序)1O(n^2)
'mergesort'(归并排序)2O(n*logn)
'heapsort'(堆排序)3O(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)创建等差数列

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山上有多花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值