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