我试图找到一个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
谢谢!
答案 0 :(得分:0)
因为你想为多次迭代调用这个函数并且它已经使用了有效的Numpy函数,我认为关键是尽可能多地移动任何循环之外的代码。这意味着当前函数foot_mask
不能按原样使用,但应该重构一点。
我并不完全清楚你打算如何在循环中调用你的函数,但基本上我建议你编写这样的代码:
for ring_size in ring_sizes:
mask = footprint.footprint(ring_size,ring_size,700,700, 0)
I, J = np.where(mask == 1)
for lat_end, lon_end in data: # Or some other loop(s)
mask_index = ((I + lat_end) % 700, (J + lon_end) % 700)
# Then use `mask_index` as desired
这样可以减少对footprint.footprint
和numpy.where
的调用,代码应该运行得更快。此外,对numpy.roll
的调用已被取代指数的模数所取代。
如果没有更多信息,如何准确地组织循环以及加速的大小很难说。