代码之家  ›  专栏  ›  技术社区  ›  Solomon Vimal

是否有一种Python等效于MATLAB的vct2mtx?

  •  1
  • Solomon Vimal  · 技术社区  · 7 年前

    我有一个点列表(纬度和经度)和这些点对应的值列表。现在我想用这个做一个二维网格。虽然直接循环排序的经纬度来创建2D网格很简单,但我想知道是否有一个有效的Python函数(可能在numpy中?)

    import numpy as np
    lats = [1,2,3] 
    lons=[4,5,6] 
    values=[7,8,9]
    
    def vec2mtx(lats, lons, values):
        Z = np.zeros((len(set(lats)),len(set(lons))))
        Z.fill(-9999) # no data value
        lats_grid = np.zeros((len(set(lats)),len(set(lons))))
        lons_grid = np.zeros((len(set(lats)),len(set(lons))))
        search_sorted_lats = np.searchsorted(np.sort(list(set(lats))), lats)
        search_sorted_lons = np.searchsorted(np.sort(list(set(lons))), lons)
        Z[(search_sorted_lats, search_sorted_lons)] = values
        lats_grid[(search_sorted_lats, search_sorted_lons)] = lats
        lons_grid[(search_sorted_lats, search_sorted_lons)] = lons
        Z = np.flipud(Z)
        return lats_grid, lons_grid, Z
    
    lats_grid, lons_grid, Z = vec2mtx(lats, lons, values)
    

    What Z looks like

    这段代码完成了我需要做的事情,但对于numpy中应该是一行的东西来说,这似乎太多了?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Solomon Vimal    7 年前

    该片段更新了Mad物理学家的建议。也许其他人会觉得这很有用:

    import numpy as np
    lats = [1,2,3] 
    lons=[4,5,6] 
    values=[7,8,9]
    
    def vec2mtx(lats, lons, values):
        ''' Convert vectors of lat,lon locations and values to 2D grid'''
        Z = np.zeros((len(set(lats)),len(set(lons))))
        Z.fill(-9999) # no data value
        lat_set = np.unique(lats); lons_set = np.unique(lons)
        lats_grid = np.zeros((len(lats_set),len(lons_set)))
        lons_grid = np.zeros((len(lats_set),len(lons_set)))
        search_sorted_lats = np.searchsorted(np.sort(lats_set), lats)
        search_sorted_lons = np.searchsorted(np.sort(lons_set), lons)
        Z[(search_sorted_lats, search_sorted_lons)] = values
        lats_grid[(search_sorted_lats, search_sorted_lons)] = lats
        lons_grid[(search_sorted_lats, search_sorted_lons)] = lons
        Z = np.flipud(Z)
        return lats_grid, lons_grid, Z
    
    lats_grid, lons_grid, Z = vec2mtx(lats, lons, values)