Shapely Convex Hull 区域给出与 scipy.ConvexHull 区域截然不同的结果?
Shapely Convex Hull area gives radically different results from scipy.ConvexHull area?
我一定遗漏了一些非常明显的东西,但 scipy.ConvexHull.area
与 shapely.convex_hull.area
计算的面积似乎存在巨大差异。我得到
Scipy Convex Hull Area: 457761.9061526276, Shapely Convex Hull Area: 13192154623.86528
from shapely.geometry import MultiPoint
from scipy.spatial import ConvexHull
import json
def convex_hull_compare():
with open("./test_points.json", 'r') as f:
points = json.load(f)
print(points)
hull = ConvexHull(points)
ch_area = MultiPoint(points).convex_hull.area
print(
f"Scipy Convex Hull Area: {hull.area}, Shapely Convex Hull Area: {ch_area}")
# Scipy Convex Hull Area: 457761.9061526276, Shapely Convex Hull Area: 13192154623.86528
if __name__ == "__main__":
convex_hull_compare()
我已将 test_points.json
上传到 Github Gist here 并编写了代码的最小版本以便于复制。
一位乐于助人的评论者链接了 :它的要点是对于二维点,我们需要 ConvexHull.volume
,而不是 ConvexHull.area
。
这确实给了我们正确的答案,但这确实令人困惑,因为文档根本没有提到这一点。
from shapely.geometry import MultiPoint
from scipy.spatial import ConvexHull
import json
def convex_hull_compare():
with open("./test_points.json", 'r') as f:
points = json.load(f)
print(points)
hull = ConvexHull(points)
ch_area = MultiPoint(points).convex_hull.area
print(
f"Scipy Convex Hull Area: {hull.area}, Shapely Convex Hull Area: {ch_area}")
# Scipy Convex Hull Area: 457761.9061526276, Shapely Convex Hull Area: 13192154623.86528
print(
f"Scipy Convex Hull Area: {hull.volume}, Shapely Convex Hull Area: {ch_area}")
#Scipy Convex Hull Area: 13192154623.865295, Shapely Convex Hull Area: 13192154623.86528
if __name__ == "__main__":
convex_hull_compare()
我一定遗漏了一些非常明显的东西,但 scipy.ConvexHull.area
与 shapely.convex_hull.area
计算的面积似乎存在巨大差异。我得到
Scipy Convex Hull Area: 457761.9061526276, Shapely Convex Hull Area: 13192154623.86528
from shapely.geometry import MultiPoint
from scipy.spatial import ConvexHull
import json
def convex_hull_compare():
with open("./test_points.json", 'r') as f:
points = json.load(f)
print(points)
hull = ConvexHull(points)
ch_area = MultiPoint(points).convex_hull.area
print(
f"Scipy Convex Hull Area: {hull.area}, Shapely Convex Hull Area: {ch_area}")
# Scipy Convex Hull Area: 457761.9061526276, Shapely Convex Hull Area: 13192154623.86528
if __name__ == "__main__":
convex_hull_compare()
我已将 test_points.json
上传到 Github Gist here 并编写了代码的最小版本以便于复制。
一位乐于助人的评论者链接了 ConvexHull.volume
,而不是 ConvexHull.area
。
这确实给了我们正确的答案,但这确实令人困惑,因为文档根本没有提到这一点。
from shapely.geometry import MultiPoint
from scipy.spatial import ConvexHull
import json
def convex_hull_compare():
with open("./test_points.json", 'r') as f:
points = json.load(f)
print(points)
hull = ConvexHull(points)
ch_area = MultiPoint(points).convex_hull.area
print(
f"Scipy Convex Hull Area: {hull.area}, Shapely Convex Hull Area: {ch_area}")
# Scipy Convex Hull Area: 457761.9061526276, Shapely Convex Hull Area: 13192154623.86528
print(
f"Scipy Convex Hull Area: {hull.volume}, Shapely Convex Hull Area: {ch_area}")
#Scipy Convex Hull Area: 13192154623.865295, Shapely Convex Hull Area: 13192154623.86528
if __name__ == "__main__":
convex_hull_compare()