【问题标题】:List as element of list of lists or multidimensional lists as a grid列表作为列表列表的元素或作为网格的多维列表
【发布时间】:2013-05-16 13:34:49
【问题描述】:

我正在尝试创建一个 lat/lon 网格,其中包含一组找到的索引,其中满足 lat/lon 组合的两个条件。这种方法可能过于复杂,但使用网格网格或 numpy 广播也失败了。如果有更好的方法,请随时分享您的知识。 :-)

将 lat/lon 值舍入为 1° 的网格大小分辨率,但保留数组的全长:

x = np.around(lon, decimals=0) 
y = np.around(lat, decimals=0) 

数组由 -180 到 180 和 -82° 到 82° 的经度/纬度值组成;可能有多个连拍

检查每个纬度/经度组合有多少测量可用于 1°/1° 网格点:

a = arange(-180,181)    
b = arange(-82,83)
totalgrid = [ [ 0 for i in range(len(b)) ] for j in range(len(a)) ]
for d1 in range(len(a)):
    for d2 in range(len(b)):
        totalgrid[d1][d2]=np.where((x==a[d1])&(y==b[d2]))[0]

此方法失败并仅返回包含空数组的列表列表。我不知道为什么它不能正常工作。 将最后一行替换为:

totalgrid[d1][d2]=np.where((x==a[0])&(y==b[0]))[0] 

返回从 lon/lat 中找到的所有在 -180°/-82° 处的索引。不幸的是,这需要一段时间。我在某处错过了 for 循环吗?!

更详细的问题: @askewchan 不幸的是,这并不能解决我原来的问题。 正如预期的那样,结果很好地代表了groundtrack。 但除了我需要每个网格点的总点数之外,我还需要 lat/lon 数组中的 lat/lon 组合的每个索引以进行进一步计算。 假设我有一个数组

lat(100000L,), lon(100000L,) and a third one array(100000L,)

对应于每个点的测量值。我需要纬度/经度中所有 1°/1° 组合的每个索引,以检查数组(100000L,)中的该索引是否满足条件。现在让我们假设 lat/lon 的索引 [10000,10001,10002,..,10025] 在同一个网格点上。对于这些索引,我需要检查 array[10000,10001,10002,..,10025] 现在是否满足条件,即 np.where(array==0)。使用 cts.nonzero() 我只能得到直方图中的索引。但是随后对直方图的值有贡献的每个点的所有信息都会丢失。希望你能明白我最初遇到的问题。

【问题讨论】:

  • 因此,您似乎需要一个列表列表 a 其中 a[i] 是属于 ith 1° bin 的 latlon 的所有索引的列表?
  • 不知道为什么我以前的帖子现在有效。但它会在每个 lon/lat (d1/d2) 点返回满足条件的索引列表。但不幸的是,这需要几分钟。这很明显,因为它通过纬度/经度迭代了 59040 次。有没有更快的方法来获得相同的结果?我喜欢你的直方图方法@askewchan,但不幸的是我感兴趣的所有信息都丢失了。

标签: python list numpy


【解决方案1】:

不确定我是否理解这里的目标,但您想计算每个 1° 部分中有多少纬度/经度对?这就是直方图的作用:

lon = np.random.random(5000)*2*180 - 180
lat = np.random.random(5000)*2*82 - 82

a = np.arange(-180,181)
b = np.arange(-82,83)

np.histogram2d(lon, lat, (a,b))
#(array([[ 0.,  0.,  1., ...,  0.,  0.,  0.],
#        [ 0.,  2.,  0., ...,  0.,  0.,  1.],
#        [ 0.,  0.,  0., ...,  0.,  1.,  0.],
#        ..., 
#        [ 0.,  1.,  0., ...,  0.,  0.,  0.],
#        [ 0.,  0.,  0., ...,  0.,  0.,  0.],
#        [ 0.,  0.,  0., ...,  0.,  0.,  0.]]),

非零计数的索引位于:

cts.nonzero()
#(array([  0,   0,   0, ..., 359, 359, 359]),
# array([  2,  23,  25, ..., 126, 140, 155]))

你也可以画出来:

cts, xs, ys = np.histogram2d(lon, lat, (a,b))

pyplot.imshow(cts, extent=(-82,82,-180,180))

【讨论】:

  • 好的,根据你的直方图,我至少得到了每对的总数。因此,图像将或多或少地代表卫星的地面轨迹。但是我需要这些对在纬度/经度中的索引来检查纬度/经度长度的第三个数组是否有某些条件。因此我必须将索引存储在一个数组中,对吗?也许我的想法太复杂了,还有另一种方法。
  • 对不起,我的延迟回答。不幸的是,这并不能解决我原来的问题。由于cmets的限制,我编辑了最初的帖子并添加了详细的问题报告。
猜你喜欢
  • 2014-04-09
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多