如何使用scipy.spatial ConvexHull屏蔽Qhull的Killing degenerate triangle信息
屏蔽Qhull的"Killing degenerate triangle"输出信息的方法
以下是几种可行的解决思路:
1. 使用Qhull内置的静默选项
直接在qhull_options中添加Qq参数,该参数会抑制Qhull的状态类输出信息,包括"Killing degenerate triangle":
from scipy.spatial import ConvexHull hull = ConvexHull(coordinates, qhull_options="QJ Qq")
这是最精准的方案,直接从Qhull层面关闭冗余输出,不会影响其他程序的标准输出。
2. 临时重定向标准输出
如果Qhull的静默选项无效,可以通过Python临时拦截stdout输出,执行完凸包计算后再恢复:
基础实现
import sys from scipy.spatial import ConvexHull # 保存原始stdout original_stdout = sys.stdout # 跨平台重定向到空设备(Linux/macOS用/dev/null,Windows用nul) null_device = '/dev/null' if sys.platform != 'win32' else 'nul' sys.stdout = open(null_device, 'w') try: hull = ConvexHull(coordinates, qhull_options="QJ") finally: # 恢复原始输出流 sys.stdout.close() sys.stdout = original_stdout
优雅的上下文管理器封装
可以封装成上下文管理器,方便重复使用:
import sys from io import StringIO from contextlib import contextmanager from scipy.spatial import ConvexHull @contextmanager def suppress_stdout(): original_stdout = sys.stdout sys.stdout = StringIO() try: yield finally: sys.stdout = original_stdout # 使用示例 with suppress_stdout(): hull = ConvexHull(coordinates, qhull_options="QJ")
说明
这类输出不属于Python的警告或QhullError异常,是Qhull底层程序直接打印到标准输出的状态信息,因此捕获Python警告、处理异常的方法无效,必须从输出流拦截或Qhull参数配置入手。
内容的提问来源于stack exchange,提问作者greyeagle
相关产品推荐
相关产品推荐

