gpt4 book ai didi

python - 最快的鞋带配方方法

转载 作者:行者123 更新时间:2023-12-03 09:12:22 25 4
gpt4 key购买 nike

我做了一个用鞋带方式计算面积多边形的函数。

这非常有效,但现在我想知道是否没有更快的方法来获得相同的结果。我想知道这一点,因为这个函数对于具有大量坐标的多边形必须运行得更快。

我的功能:

def shoelace_formula(polygonBoundary, absoluteValue = True):
nbCoordinates = len(polygonBoundary)
nbSegment = nbCoordinates - 1

l = [(polygonBoundary[i+1][0] - polygonBoundary[i][0]) * (polygonBoundary[i+1][1] + polygonBoundary[i][1]) for i in xrange(nbSegment)]

if absoluteValue:
return abs(sum(l) / 2.)
else:
return sum(l) / 2.

我的多边形:

polygonBoundary = ((5, 0), (6, 4), (4, 5), (1, 5), (1, 0))

结果:

22.

有什么想法吗?

我尝试使用 Numpy :它速度最快,但您必须先转换坐标。

import numpy as np
x, y = zip(*polygonBoundary)

def shoelace_formula_3(x, y, absoluteValue = True):

result = 0.5 * np.array(np.dot(x, np.roll(y, 1)) - np.dot(y, np.roll(x, 1)))
if absoluteValue:
return abs(result)
else:
return result

最佳答案

对我来说,最快的方法是使用 numpy,你必须发送一个 numpy 的 (x,y) 坐标数组作为鞋带方法中的参数:

import numpy as np
def shoelace(x_y):
x_y = np.array(x_y)
x_y = x_y.reshape(-1,2)

x = x_y[:,0]
y = x_y[:,1]

S1 = np.sum(x*np.roll(y,-1))
S2 = np.sum(y*np.roll(x,-1))

area = .5*np.absolute(S1 - S2)

return area

关于python - 最快的鞋带配方方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41077185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com