You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为浮点元组绘制凸包遇问题,寻求技术协助

凸包绘制(浮点型点集)问题解决

首先明确: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:10:25