【发布时间】:2012-11-03 00:11:45
【问题描述】:
我发现了许多如何在 Python/NumPy 中矢量化 for 循环的示例。不幸的是,我不知道如何使用矢量化形式减少简单 for 循环的计算时间。在这种情况下甚至可能吗?
time = np.zeros(185000)
lat1 = np.array(([48.78,47.45],[38.56,39.53],...)) # ~ 200000 rows
lat2 = np.array(([7.78,5.45],[7.56,5.53],...)) # same number of rows as time
for ii in np.arange(len(time)):
pos = np.argwhere( (lat1[:,0]==lat2[ii,0]) and \
(lat1[:,1]==lat2[ii,1]) )
if pos.size:
pos = int(pos)
time[ii] = dtime[pos]
【问题讨论】:
-
lat、lon和time是什么?特别是它们的形状是什么? -
我更新了上面的示例值。
-
您能解释一下
pos = np.argwhere( (lat1[:,0]==lat2[ii,0]) and (lat1[:,1]==lat2[ii,1]) )的含义吗?那么,你想在 lat2 中找到这样一个等于 lat1 的行吗?你不害怕浮点舍入错误吗?如果是这样,您可以在 lat2 上使用二进制搜索(在其排序副本中搜索) -
我正在寻找两列中 lat1 和 lat2 相等的行。在这种情况下,我需要 lat1 和 lat2 的行号。目前“ii”和“pos”给了我这个,它有效。我在两个数组上都使用了 np.around(XX,decimals=2) 以避免舍入错误。
-
所以,如果
lat1 = [[1,2], [3,4], [5,6], [7,8]]和lat2 = [[3,4], [5,6], [7,8], [1,2]]那么算法的结果应该是[1, 2, 3, 0](lat2 的 0-st 元素在 lat1 的 1-st 位置,lat2 的 1 个元素是on 2, 2 on 3, 3 on 0) 这是你想要的吗?
标签: python numpy scipy vectorization