IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> numpy(五)函数篇 -> 正文阅读

[人工智能]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:元组 , 不推荐使用,次函数使用不为空矩阵,有极小的误差!

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:55:34  更:2021-12-28 22:56:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 23:22:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码