![](/img/trans.png)
[英]How can I find the nearest distance between points in a 2D array and a 3D matrix grid?
[英]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-差異。 numpy
的diff
函數對於這種情況很有用。
因此,如果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.