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

如何高效在PyVista PolyData网格中定位含指定顶点的单元并着色

高效实现PolyData网格中包含指定顶点的单元着色

原代码通过坐标调用find_containing_cell逐个查找单元,在大型网格中效率极低——因为每次查找都需要遍历网格判断空间包含关系,循环叠加后耗时剧增。

优化思路

直接利用PyVista预先维护的点-单元关联数据,跳过空间查找步骤。PolyData对象的point_cells属性存储了每个顶点所属的所有单元ID列表,直接读取这些关联信息即可快速定位目标单元。

优化后代码

import pyvista as pv
import numpy as np

mesh = pv.Sphere()
# 初始化单元标量为0
data = np.zeros(mesh.n_cells, dtype=int)

# 指定需要关联的顶点索引
point_indexes = np.random.randint(0, mesh.n_points, 100)

# 收集所有包含指定顶点的单元ID(去重)
target_cells = np.concatenate([mesh.point_cells[point] for point in point_indexes])
target_cells = np.unique(target_cells)

# 标记目标单元
data[target_cells] = 1

mesh.cell_data['data'] = data
mesh.plot()

关键说明

  • mesh.point_cells是PyVista内置的关联数据结构,无需额外计算,读取速度极快;
  • 使用np.concatenate和np.unique实现向量化操作,避免循环中的重复赋值,进一步提升效率;
  • 该方法的时间复杂度与指定顶点数量及关联单元数量正相关,远低于原方法的线性遍历复杂度。

内容的提问来源于stack exchange,提问作者Zep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:54:31