python - 如何在 python 中找到二维数组的临界点?

标签 python arrays numpy numerical-computing

我有一个 (960,960) 数组,我试图找到关键点,以便找到局部极值。

我尝试过使用 np.diff 和 np.gradient,但遇到了一些问题,我不确定该使用哪个函数。

np.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)

关于python - 如何在 python 中找到二维数组的临界点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23530187/

相关文章:

python - 如何在Python中返回多维数组的子数组?

python - 如何检查两片 numpy 数组是否相同(或重叠)?

python - 从 NLTK 的 Penn Treebank 语料库样本创建字典?

java - SQLite,以数组形式返回数据

java - 如何输出这组测试成绩?

numpy - 类型错误 : ufunc 'subtract' did not contain a loop with signature matching types dtype ('<U1' ) dtype ('<U1' ) dtype ('<U1' )

python - 将组分配给 Pandas 列中的连续 1

python - 如何使用Python为相同的输入id生成唯一的id?

python - 创建 numpy 数组的扩展 View

python - 图像片段中所有像素的强度值之和