【发布时间】:2016-02-15 06:17:02
【问题描述】:
我试图在 700x700 的 python numpy 数组中找到索引,以便在单独的数组中找到具有相同索引的数字。我循环了很多次,所以它需要很长时间,我想知道是否有更快的方法来做到这一点。到目前为止,这就是我所拥有的:
我的lat_end 和lon_end 是我在temp_mask 数组中找到的索引。
掩码在我的 700x700 阵列上创建一个占用空间,其环形大小定义了我希望占用空间有多大。 mask_index 正在查找 temp_mask 等于 1 的位置,因此我可以通过执行以下操作找到单独数组的索引:other_array[footprint_index]。然后,这将为我提供 temp_mask 足迹中的 other_array 的值。
def foot_mask(lat_end,lon_end):
mask = footprint.footprint(ring_size,ring_size,700,700, 0)
temp_mask = np.roll(np.roll(mask,lat_end,axis = 0),lon_end, axis = 1)
mask_index = np.where(temp_mask == 1)
return mask_index
谢谢!
【问题讨论】:
-
如果每次迭代的
mask都相同,我想关键是在循环之外进行尽可能多的计算。除此之外,代码看起来相当高效。只要footprint.footprint不是主要的时间消费者。 -
如何在函数内部放置一个 for 循环,以便在每次迭代循环时返回 mask_index?我会让它在循环中迭代 7 次以更改“环大小”
-
您是否也在另一个循环中更改(例如)
lat_end或lon_end?因为对于这段代码来说,7 次迭代并不是那么多。您能否编辑问题以包括您打算如何调用此函数?如果您还没有实现任何循环,那么伪代码或纯英语也会有所帮助。 -
我在这个循环上迭代了大约 150,000 次。在我的数据中,将有大约 4000 个 lat_end 和 lon_end 点对应于不同的纬度和经度点。然后对于这些点中的每一个,对于我正在使用的不同时间戳,我将对其进行大约 7 次迭代。
-
您能否更详细地解释您要解决的问题?理想情况下,发布您自己的缓慢但工作的代码,并展示如何生成一些虚假的输入数据,以便我们可以看到输入和期望的输出是什么。我怀疑可能存在比在循环内调用
foot_mask更快的矢量化方法,但我没有足够的信息继续下去。
标签: python arrays numpy processing-efficiency