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

如何快速获取Numpy Meshgrid中每个网格的中点并绘制?

高效生成Meshgrid网格框中点并批量绘制的方法

你可以利用Numpy的矢量运算特性,一次性生成所有网格框的中点坐标,再批量绘制标记点,完全不用逐个处理,效率高很多。

核心思路

原代码仅计算了单个中点,且手动处理间隔,无法批量生成。我们可以直接基于Meshgrid生成的顶点网格,通过矢量运算得到所有网格的中点:

  1. 因为linspace生成的是等间隔序列,直接取相邻顶点的差值得到网格步长
  2. 取顶点网格的前inputy行、前inputx列(即每个网格的左上角顶点),加上步长的一半就是中点坐标
  3. 用批量绘制函数一次性完成所有标记点的绘制

完整改进代码

import numpy as np
import matplotlib.pyplot as plt

# 假设你已定义以下变量:x0, y1, x1, y2, inputx, inputy
xg = np.linspace(0, (x1 - x0), inputx + 1)
yg = np.linspace(0, (y2 - y1), inputy + 1)
xgr, ygr = np.meshgrid(xg, yg)

# 计算网格的固定步长
x_step = xg[1] - xg[0]
y_step = yg[1] - yg[0]

# 一次性生成所有网格的中点坐标(矢量运算,无循环)
x_centers = xgr[:-1, :-1] + x_step / 2
y_centers = ygr[:-1, :-1] + y_step / 2

# 绘制画布与原有网格(假设你已实现蓝色网格的绘制)
fig, ax = plt.subplots()
# 这里添加你原有的网格绘制代码(比如蓝色圆圈网格)

# 批量绘制红色中点:用scatter比逐个添加Circle高效得多
ax.scatter(x_centers.flatten(), y_centers.flatten(), c='r', s=25, marker='o')
# 如果必须使用Circle对象,也可以批量循环添加(效率稍低)
# for x, y in zip(x_centers.flatten(), y_centers.flatten()):
#     ax.add_patch(plt.Circle((x, y), 5, color='r'))

plt.show()

关键细节说明

  • xgr[:-1, :-1]:Meshgrid生成的顶点矩阵是(inputy+1)×(inputx+1)的维度,去掉最后一行和最后一列后,得到inputy×inputx的矩阵,对应每个网格的左上角顶点
  • 矢量运算:Numpy会自动对整个矩阵进行加减运算,无需手动循环,处理大网格时速度优势明显
  • scatter的s参数:对应标记点的大小,原代码中Circle半径为5,这里s=25(约为半径平方的4倍)可以达到近似视觉效果,可根据需求调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:52:53