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

如何基于Numpy高效实现网格点与像素坐标的叠加?

高效实现网格点与形状坐标的批量相加

核心实现代码

用Numpy的广播机制可以高效完成这个需求,避免低效的循环操作,代码如下:

import numpy as np

# 将输入列表转为Numpy数组
myarray = np.array([[0,0],[1,1],[2,2]])
mygrid = np.array([[70,70],[100,100],[30,30]])

# 广播相加 + 展平得到目标数组
desired_result = (myarray[np.newaxis, :, :] + mygrid[:, np.newaxis, :]).reshape(-1, 2)

代码解释

  1. 维度扩展:通过np.newaxis给myarray增加一个维度(变为(1, 3, 2)),给mygrid增加一个维度(变为(3, 1, 2))
  2. 广播相加:Numpy会自动将两个数组扩展为(3, 3, 2)的形状,对应每个网格点与每个形状点逐一相加
  3. 展平结果:用reshape(-1, 2)把三维数组转成二维,得到你想要的[[70,70],[71,71],...]格式

运行后输出的desired_result完全匹配预期。

生成像素网格的扩展应用

如果要生成带形状的像素网格,可以按以下步骤操作:

# 确定坐标范围,取所有结果中的最大值+1(假设坐标从0开始)
max_coord = desired_result.max() + 1
# 创建全1矩阵
grid_matrix = np.ones((max_coord, max_coord), dtype=int)
# 提取目标坐标的x、y值
x = desired_result[:, 0]
y = desired_result[:, 1]
# 将对应位置设为0
grid_matrix[y, x] = 0

这样就得到了每个网格点位置带有1x3像素块的矩阵。

扩展到其他几何形状

只需替换myarray为对应几何形状的坐标集合即可,比如生成圆形的坐标点:

# 生成半径为2的圆形坐标点(筛选满足x²+y²≤r²的点)
radius = 2
xs, ys = np.meshgrid(np.arange(-radius, radius+1), np.arange(-radius, radius+1))
circle_points = np.column_stack((xs.flatten(), ys.flatten()))[xs**2 + ys**2 <= radius**2]

# 用同样的方法生成圆形网格
circle_grid = (circle_points[np.newaxis, :, :] + mygrid[:, np.newaxis, :]).reshape(-1, 2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:33:09