将坐标向量转换为 numpy 二维矩阵

Converting coordinates vector to numpy 2D matrix

我有一组 3D 坐标点:[lat,long,elevation] ([X,Y,Z]),来自 LIDAR 数据。 点未排序,点之间的步长或多或少是随机的。

我的目标是构建一个函数,将这组点转换为像素数恒定的 2D numpy 矩阵,其中每个 (X,Y) 单元格都保存 Z 值,然后将其绘制为高程热图。

我想到的解决方案是为每个像素构建一个桶,迭代这些点并根据它的 (X,Y) 值将每个点放入一个桶中。最后创建一个矩阵,其中每个卖出都包含相应桶中 Z 值的平均值。

  1. 由于我在这个领域没有很多经验,所以我很想听听一些提示,特别是如果有更好的方法来解决这个任务。

  2. 是否有一个 numpy 函数可以将我的点集转换为所需的矩阵? (也许 meshgrid 具有恒定值的步骤?)

  3. 如果我构建非常稀疏的矩阵,其中步长为

    min[min{Xi,Xj} , min{Yk,Yl}] 对于所有 i,j,k,l

    有没有办法“降低”分辨率并将其转换为具有所需大小的矩阵?

谢谢!

我知道我没有回答你一半的问题,但我会这样做:

  1. 创建所需分辨率的二维数组,
  2. "leftmost"值对应x的最小值等等
  3. 用 x 和 y 值方面最接近匹配的高程值填充数组
  4. 平滑结果。

你不需要重新发明自行车。

from matplotlib.mlab import griddata
import numpy as np

#-- Your coordinates
x = np.random.random(100)
y = np.random.random(100)
z = np.random.random(100)*10
#--

#-- Your new grid
xsteps=200    # resolution in x
ysteps=200    # resolution in y
xi = linspace(min(x), max(x), xsteps)
yi = linspace(min(y), max(y), ysteps)
Z = griddata(x, y, z, xi, yi)  # interpolates between points in your data
#--

plt.pcolormesh(xi, yi, Z, cmap=plt.cm.hot)   # plot your elevation map :D
plt.show()