博客
关于我
numpy.ptp()函数
阅读量:321 次
发布时间:2019-03-04

本文共 3675 字,大约阅读时间需要 12 分钟。

调用方式:

numpy.ptp(a, axis=None, out=None, keepdims=<no value>)

各个参数意义

a:输入数组
axis: 决定沿着哪一个轴寻找峰值位置,默认将数组扁平化以后寻找峰值位置,当然该值也可以为负数,表示从最后一个坐标轴向第一个坐标轴寻找峰值位置
有返回值,返回值为一个元组类型的索引数组,即得到 非零元素在原数组中的下标
out:输出数组,要求它必须具有相同的形状和缓冲区长度,所以一般来说可以不进行指定。(这里不做过多讨论)
keepdims:(True or False,选填参数),
有返回值,设定了out参数时可以将值返回到一个与out参数相关的数组中进行保存。如果没有设定,我们可以直接指将值返回到一个数组中。

代码如下:

# -*- coding: utf-8 -*-"""Created on Wed Oct 21 10:00:45 2020@author: 15025"""import numpy as npclass NumpyStudy:    def peakToPeak(self):        array = np.array([[0, 1, 2, 3], [4, 5, 6, 7]])        array_output1 = np.ptp(array)        # array_output2 = np.nonzero(array2)        print("数组array_output1的值为: ")        print(array_output1)        # print("数组array_output2的值为: ")        # print(array_output2)        if __name__ == "__main__":    main = NumpyStudy()    main.peakToPeak()"""数组array_output1的值为: 7""" 

我们可以看到,此时我们并未指定out参数,所以我们直接用array_output1来存储返回值,并且我们也没有指定axis参数,所以我们看到结果将二维数组扁平化取得了最大值,最终只得到了一个结果7。然而np.ptp()函数真的是取得数组的最大值吗?其实并不是,我们看如下代码:

# -*- coding: utf-8 -*-"""Created on Wed Oct 21 10:00:45 2020@author: 15025"""import numpy as npclass NumpyStudy:    def peakToPeak(self):        array = np.array([[1, 2, 3, 4], [4, 5, 6, 7]])        array_output1 = np.ptp(array)        print("数组array_output1的值为: ")        print(array_output1)        if __name__ == "__main__":    main = NumpyStudy()    main.peakToPeak()"""数组array_output1的值为: 6"""    

我们可以看到此时的结果为6,这是因为我们对原始的二维数组元素进行了改变,使得此时数组扁平化以后的最小值为1而不再是0。所以np.ptp()函数实现的功能等同于np.max(array) - np.min(array)

然后我们进一步讨论axis参数的使用。代码如下:

# -*- coding: utf-8 -*-"""Created on Wed Oct 21 10:00:45 2020@author: 15025"""import numpy as npclass NumpyStudy:    def peakToPeak(self):        array = np.array([[1, 2, 3, 4], [4, 5, 6, 7]])        array_output1 = np.ptp(array, axis=0)        print("数组array_output1的值为: ")        print(array_output1)        if __name__ == "__main__":    main = NumpyStudy()    main.peakToPeak()"""数组array_output1的值为: [3 3 3 3]"""# =================================================================================================================# -*- coding: utf-8 -*-"""Created on Wed Oct 21 10:00:45 2020@author: 15025"""import numpy as npclass NumpyStudy:    def peakToPeak(self):        array = np.array([[1, 2, 3, 4], [4, 5, 6, 7]])        array_output1 = np.ptp(array, axis=1)        print("数组array_output1的值为: ")        print(array_output1)        if __name__ == "__main__":    main = NumpyStudy()    main.peakToPeak()"""数组array_output1的值为: [3 3]"""

关于坐标轴问题,可以参考。这里的axis=0表示沿着y轴取最大值与最小值之差,axis=1表示沿着x轴取最大值与最小值之差。

然后我们进一步讨论keepdims参数的使用。代码如下:

# keepdims为False的情况(默认情况)# -*- coding: utf-8 -*-"""Created on Wed Oct 21 10:00:45 2020@author: 15025"""import numpy as npclass NumpyStudy:    def peakToPeak(self):        array = np.array([[1, 2, 3, 4], [4, 5, 6, 7]])        array_output1 = np.ptp(array, keepdims=False)        print("数组array_output1的值为: ")        print(array_output1)        if __name__ == "__main__":    main = NumpyStudy()    main.peakToPeak()"""数组array_output1的值为: 6"""# =================================================================================================================# keepdims为True的情况# -*- coding: utf-8 -*-"""Created on Wed Oct 21 10:00:45 2020@author: 15025"""import numpy as npclass NumpyStudy:    def peakToPeak(self):        array = np.array([[1, 2, 3, 4], [4, 5, 6, 7]])        array_output1 = np.ptp(array, keepdims=True)        print("数组array_output1的值为: ")        print(array_output1)        if __name__ == "__main__":    main = NumpyStudy()    main.peakToPeak()"""数组array_output1的值为: [[6]]"""

我们可以看到,当为True的时候,我们会保留数组扁平化之前的轴,本来我们的原始数组是二维的,所以这里的输出也会是一个二维数组。同理若原始数组为三维,这里也会是三维输出。

如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~

转载地址:http://wouh.baihongyu.com/

你可能感兴趣的文章
Calendar日历类(抽象类)的使用
查看>>
Asp.Net Core&Jenkins持续交付到Windows Server
查看>>
自我总结和学习表单提交的几种方式 (一)
查看>>
利用Bootstrap Paginator插件和KnockoutJS完成分页功能
查看>>
.NET微信网页开发之使用微信JS-SDK调用微信扫一扫功能
查看>>
.NET微信网页开发之使用微信JS-SDK自定义微信分享内容
查看>>
.NET微信网页开发之使用微信JS-SDK获取当前地理位置
查看>>
Android Studio在android Emulator中运行的项目黑屏
查看>>
Python写代码的时候为什么要注释?Sun因此被Oracle收购
查看>>
JAVA高并发集合详解
查看>>
解决Spirng注入时名称下的红色波浪线
查看>>
操作系统知识概述
查看>>
读懂操作系统(x64)之堆栈帧(过程调用)
查看>>
仓储模式到底是不是反模式?
查看>>
VS2015安装EF Power Tools
查看>>
Web APi之捕获请求原始内容的实现方法以及接受POST请求多个参数多种解决方案(十四)
查看>>
ASP.NET MVC之JsonResult(六)
查看>>
SQL Server之深入理解STUFF
查看>>
EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public?
查看>>
使用mybatis-generator生成底层
查看>>