我想制作一个matplotlib轮廓图。为此,我需要定义一个向量Lat,Lon和Den。纬度和经度有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,第三列为密度。我可以使用以下方法创建网格:

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


这将返回6个组合。如何制作一个数组“ Den”,使它在原始矩阵中获取一对LatLon值,否则为0?如果可以避免循环,那就更好了。

最佳答案

例如,在(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

关于python - 在python中从矩阵创建MeshGrid,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47155550/

10-12 18:20