【问题标题】:Creating a meshgrid from a matrix in python从 python 中的矩阵创建网格网格
【发布时间】:2017-11-07 10:26:47
【问题描述】:

我想制作一个 matplotlib 等高线图。为此,我需要定义一个向量 Lat、Lon 和 Den。 Lat 和 Lon 有 128 个唯一值,占 16384 个可能的对。我已经有一个矩阵,其中有一个纬度、经度和登的列。但是,这个矩阵的大小是 10946。这意味着有几对 Lat-Lon 没有关联的 Den 并且我想取值为 0。一个例子如下:

     Matrix = array([[ 1.5,  0.9,  1.5],
                     [ 1.5,  1.5,  1  ],
                     [ 2.9,  1.5,  2  ]])

第一列是纬度,第二列是经度,第三列是密度。我可以使用以下方法创建网格:

    Lat, Lon = np.mesgrid(set(Matrix[:,0]), set(Matrix[:,1]))

这将返回 6 个组合。如何制作一个数组“Den”,以便将原始矩阵中的值用于一对 Lat-Lon,否则为 0?如果可以避免循环,那就更好了。

【问题讨论】:

  • 虽然这不是实际问题的答案,但您始终可以绘制 tricontour 绘图:plt.tricontourf(Matrix[:,0], Matrix[:,1], Matrix[:,2])

标签: python python-3.x numpy matplotlib


【解决方案1】:

您在(lat=30, long=20) 附近有一张这样的表格,例如:

# tab= array([
#        [ 30.1310486 ,  20.86128027,   0.34034154],
#        [ 30.44384707,  20.84228301,   0.14557502],
#        [ 30.7601326 ,  20.9971842 ,   0.16993092],
#        ..., 
#        [ 30.3797119 ,  20.47931737,   0.08614626],
#        [ 30.37689017,  20.8116245 ,   0.60779073],
#        [ 30.33829254,  20.02353876,   0.31654195]])
# shape  (10946, 3)

您可以使用np.unique 代替set,它提供了有用的反向索引,用整数标记纬度和经度:

lat,long,den = tab.T
uniq_lat,inv_lat = np.unique(lat,return_inverse=True)
uniq_long,inv_long = np.unique(long,return_inverse=True)

然后构建一个完整的密度网格:

dims = uniq_lat.size,uniq_long.size     
new_den=np.zeros(dims) # unknown values
new_den[inv_lat,inv_long]=den   # known values

并重建一个(排序的)完整表:

new_lat,new_long=meshgrid(uniq_lat,uniq_long)
new_tab=np.concatenate((new_lat,new_long,new_den)).reshape(3,-1).T

【讨论】:

  • 感谢您的帮助,但是,Lat 和 Lon 并不总是整数,因此这种方法不起作用。
  • 他们在您的第一篇文章中;)进一步描述您的矩阵以帮助帮助者。
  • 我用 float latlong 编辑帖子,并重新格式化三列的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 2021-08-19
  • 2015-03-09
  • 1970-01-01
  • 2018-11-19
相关资源
最近更新 更多