如何用Python基于两个数值列表生成均匀分布的XY网格点数组
问题原因
你之前的方法只能得到对角线点的核心原因是:np.column_stack只会对两个等长一维数组做逐元素配对,也就是(x[0], y[0])、(x[1], y[1]) ...,不会生成x和y所有排列组合的网格点。
正确实现方法
方法1:使用np.meshgrid(最常用)
这是生成均匀网格的标准方案,代码如下:
import numpy as np # 生成x、y一维取值数组,注意np.arange是左闭右开区间,要包含100的话上限需设为105 x = np.arange(0, 105, 5) y = np.arange(0, 105, 5) # 生成二维网格矩阵 X, Y = np.meshgrid(x, y) # 合并为形状为 (n, 2) 的坐标对数组,n为总点数:21*21=441个 points = np.column_stack([X.ravel(), Y.ravel()])
方法2:使用np.repeat + np.tile组合(无需生成中间二维矩阵)
如果不想生成中间的二维网格矩阵,可以直接对一维数组做重复/平铺后合并:
points = np.column_stack([ np.repeat(x, len(y)), # 每个x值重复len(y)次,对应所有y的取值 np.tile(y, len(x)) # 整个y数组重复len(x)次,对应所有x的取值 ])
效果验证
用以下代码绘图即可看到完整的均匀网格点阵:
import matplotlib.pyplot as plt plt.scatter(points[:, 0], points[:, 1], s=15) plt.show()
内容的提问来源于stack exchange,提问作者NightLearner
相关产品推荐
相关产品推荐

