繁体   English   中英

如何在python中找到2D数组的关键点?

[英]How can I find the critical points of a 2D array in python?

我有一个(960,960)阵列,我试图找到关键点,所以我可以找到局部极值。

我尝试过使用np.diff和np.gradient,但是我遇到了一些麻烦,我不确定要使用哪个函数。

np.diff提供了计算二阶diff的选项,但渐变没有。

我该如何获得关键点?

我试过了

diff = np.diff(storm, n=2)                    

dxx = diff[0]                                                                                                                                  
dyy = diff[1]                                                                                                                                  

derivative = dyy/dxx 

我在这里遇到问题,因为dxx中的某些值等于零。

然后有选项

gradient = np.gradient(storm)
g2 = np.gradient(gradient)

但这会给我什么,我在找什么?

临界点是函数的一阶导数(或多维情况下的梯度)为0的点。因此,您应该检查函数的x和y-差异。 numpydiff函数对于这种情况很有用。

因此,如果x-y方向上两个相邻元素之间的差异接近0,那么可以说该点是一个临界点。 假设你的功能是平滑的,那就是差异改变了它的符号(从负到正,反之亦然)。

# get difference in x- and y- direction
sec_grad_x = np.diff(storm,n=1,axis=0)
sec_grad_y = np.diff(storm,n=1,axis=1)

cp = []
# starts from 1 because diff function gives a forward difference
for i in range(1,n-1):
    for j in range(1,n-1):
        # check when the difference changes its sign
        if ((sec_grad_x[i-1,j]<0) != (sec_grad_x[i-1+1,j]<0)) and \
           ((sec_grad_y[i,j-1]<0) != (sec_grad_y[i,j-1+1]<0)):
            cp.append([i,j,  storm[i,j]])

cp = np.array(cp)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM