numpy.ptp()函数

调用方式:

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 np


class 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 np


class 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 np


class 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 np


class 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]
"""

关于坐标轴问题,可以参考np.repeat()的坐标轴问题。这里的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 np


class 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 np


class 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的时候,我们会保留数组扁平化之前的轴,本来我们的原始数组是二维的,所以这里的输出也会是一个二维数组。同理若原始数组为三维,这里也会是三维输出。

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

你可能感兴趣的:(Python科学计算基础,python,numpy)