gpt4 book ai didi

python - 在 python 中从矩阵创建网格

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:50 25 4
gpt4 key购买 nike

我想制作一个 matplotlib 等高线图。为此,我需要定义一个向量 Lat、Lon 和 Den。 Lat 和 Lon 有 128 个唯一值,相当于 16384 个可能的对。我已经有一个矩阵,其中有一列表示纬度、经度和密度。然而,这个矩阵的大小是 10946。这意味着有一些纬度-经度对没有与之关联的 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 的值?如果可以避免循环就更好了。

最佳答案

您在点 (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 中从矩阵创建网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47155550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com