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

2024-06-16 09:22:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组3D坐标点:【纬度,长度,海拔】([X,Y,Z]),从激光雷达数据中导出。 这些点没有排序,点之间的步长或多或少是随机的。在

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

  • 刻度必须保持真实,X和Y的步长应该相同。在
  • 矩阵不必捕捉精确的仰角图,它显然需要某种分辨率的降低来获得恒定的像素数。在

我想的解决方案是为每个像素构建一个bucket,迭代这些点,并根据它的(X,Y)值将每个点放入一个bucket中。最后创建一个矩阵,其中每个sell保存对应bucket中Z值的平均值。在

  1. 由于我在这个领域没有太多的经验,我很想听听一些建议,特别是如果有更好的方法来解决这个问题。在
  2. 有没有一个numpy函数可以把我的点集转换成所需的矩阵?(可能是步长为常量的网格网格?)在
  3. 如果我建立非常稀疏的矩阵,其中步长是

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

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

谢谢!在


Tags: 数据函数numpy网格目标bucket排序分辨率
2条回答

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

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

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

  1. 创建一个所需分辨率的二维数组
  2. “最左边”的值对应于最小的x值,以此类推
  3. 用x和y值表示的最接近匹配的高程值填充数组
  4. 平滑结果。在

相关问题 更多 >