为浮点元组绘制凸包遇问题,寻求技术协助
凸包绘制(浮点型点集)问题解决
首先明确:scipy.spatial.ConvexHull完全支持浮点型坐标点,你遇到的问题大概率是输入数据格式不兼容导致的,而非浮点类型本身的限制。
你的函数中使用了cluster[:, 0]这类numpy数组切片语法,但如果传入的cluster是纯Python元组列表(比如[(1.2,3.4), (2.5,4.6)]),会触发索引错误——因为Python列表不支持二维切片操作。
修正后的函数实现
from scipy.spatial import ConvexHull import numpy as np import matplotlib.pyplot as plt def get_cp(cluster, plt): # 将浮点元组点集转换为numpy浮点数组 cluster_arr = np.array(cluster, dtype=np.float64) hull = ConvexHull(cluster_arr) # 绘制凸包的边 for simplex in hull.simplices: plt.plot(cluster_arr[simplex, 0], cluster_arr[simplex, 1], 'c') # 绘制凸包的顶点 plt.plot(cluster_arr[hull.vertices, 0], cluster_arr[hull.vertices, 1], 'o', mec='r', color='none', lw=1, markersize=10) # 返回凸包的边索引和绘图对象 return hull.simplices, plt
测试示例
# 构造一组浮点型点集 float_points = [(0.1, 0.2), (1.3, 2.4), (3.5, 1.6), (2.7, 3.8), (0.9, 4.1)] plt.figure() simplices, plt_obj = get_cp(float_points, plt) plt_obj.show()
关键说明
- 必须将输入的元组列表转换为numpy数组,ConvexHull的底层实现依赖numpy的数组操作,同时切片语法也需要numpy数组支持。
- 指定
dtype=np.float64可以确保数据以浮点类型处理,避免自动类型转换的潜在问题。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

