调用方式:
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的时候,我们会保留数组扁平化之前的轴,本来我们的原始数组是二维的,所以这里的输出也会是一个二维数组。同理若原始数组为三维,这里也会是三维输出。
如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~