我想计算一个未知函数轮廓内的面积。我的函数值保存在一个Numpy数组中,绘制时如下所示:
我想计算不同高度的横截面积,例如峰高的50%。在
此外,有时特征周围会有噪声,因此会出现其他峰值,这意味着特定高度的轮廓可能会导致创建多个区域。如果从上面看的话,我只对围绕“兴趣峰”的轮廓内的区域感兴趣。在
在上图中,“感兴趣的峰值”是在其顶点有红点的那个。我有一个算法可以识别感兴趣的峰值,所以我总是知道我对哪个特定的峰值感兴趣。在
有人能帮我吗? 非常感谢
我找到了this question,但无法运行给定的示例。我对vs = contour.get_paths()[0].vertices
行有问题,列表索引超出范围。在
我还需要修改代码,以确保该区域包含了峰值位置
这是尝试查找区域的代码部分 水平=[0.5,0.75]
calc_levels = (radial[x_peak,y_peak])*np.transpose(levels)
cs = plt.contour(Z,X_,radial, levels = calc_levels,colors='k')
plt.clabel(cs, inline=2, fontsize=10)
for loop in range(len(levels)):
vs = None
contour_ = None
contour_ = cs.collections[loop]
vs = contour_.get_paths()[0].vertices
ax.scatter(vs[:,0],vs[:,1],calc_levels[loop],c='red',s=20)
# Compute area enclosed by vertices
a = area(vs)
features['Radial_Area_' + str(levels[loop]*100)] = area(vs)
print("r = {}: a = {}".format(levels[loop],a))
在哪里
^{pr2}$以这个问题的链接帖子为例。但是,it代码总是在contour_ = cs.collections[loop]
行崩溃,显然列表索引超出范围。我已经尝试了我能想到的每一个代码修改来让它工作,但是我现在没有主意了。在
有趣的是,如果我一行一行地运行代码,那么它不会崩溃并提供输出,即使它是一个不太可能的小值
有趣的是,我最终让这段代码在一个简单的例子中工作,其中只包含了感兴趣的峰值。我不知道我改变了上面的代码让它工作。我仍然需要一些帮助,以确定在存在多个峰值的情况下计算哪个区域。如果你能帮我这个忙,请告诉我
目前没有回答
相关问题 更多 >
编程相关推荐