scipy 如何找到两个未排序的x,y数组中的区域?

goucqfw6  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(110)

我想在两个未排序的数组(x和y)限定的区域内找到它们。如果它们是已排序的,我只需遵循example

theta = np.linspace(0, 2 * np.pi, num=1000, endpoint=True)
x = np.sin(theta)
y = np.cos(theta)
answer = np.trapz(y, x=x)

其中,x和y数组的排序正确,trapz也能正常工作(即使endpoint=False)。但是,在我的数据中,x和y没有排序。我想找出x和y包围的区域,如下例所示:

theta = np.linspace(0, 2 * np.pi, num=1000, endpoint=True)

ii = np.arange(len(x))
np.random.shuffle(ii)

x = np.sin(theta)[ii]
y = np.cos(theta)[ii]
answer = np.trapz(y, x=x) #This no longer gives the correct integral.

有没有一种方法可以找到数组包围的区域,而不用按Angular 位置排序?它不一定要使用trampz。谢谢

rsl1atfo

rsl1atfo1#

我还没有尝试过Convex Hull,但最后只是简单地按Angular 位置对点进行排序,并(在点实际上包围一个曲面的假设下)使用trapz进行积分。

def integrate_contours(x,y):
    xx = x - x.mean()
    yy = y - y.mean()
    theta_2 = np.arctan2(xx,yy)
    yy = yy[np.argsort(theta_2)]
    xx = xx[np.argsort(theta_2)]

    return np.abs(np.trapz(yy, x=xx))

相关问题