簡體   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