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

标签 python numpy matrix matplotlib lidar

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

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

  • 尺度必须保持真实,X 和 Y 应该有相同的步长。
  • 矩阵不必捕捉精确的高程图片,显然需要某种分辨率降低才能拥有恒定的像素数。

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

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

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

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

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

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

谢谢!

最佳答案

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

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()

关于python - 将坐标向量转换为 numpy 二维矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33926704/

相关文章:

python 将列表转换为矩阵并获取值

python - 在 python 中重新创建此图表 - 这是什么类型的图表?

python - 属性错误: function' object has no attribute 'linreg'

python - Python 中生成列和行总和小于 2 的所有 6x6 (0,1) 矩阵的最有效算法?

python - 读取数据文件(鲍鱼)并转换为 numpy 数组

python - 将一组数组从 python 输出保存到 csv 文件

css - 更改 CSS 旋转 div 的宽度/高度会触发顶部/左侧重新定位

python - 如何从字典列表中删除 ('u' )unicode?

Python 应用程序权限被拒绝

python - 不考虑子包中的文件